/etc/cron.hourly
に実行可能スクリプトを配置しましたが、そのスクリプトは実際には1時間ごとに実行されず、実際にはまったく実行されませんでした。
これは、私が作成したスクリプト(時の音)です。
#!/ bin/bash mplayer〜/ Music/sfx_msg-highlight.wv&>/dev/null& spd-say -r -50 -p 50 -t male3「今は$(date + "%l%p")」です。 -i〜/ Pictures/"first tee.png" -t 5000
私のcrontabは:
DISPLAY=":0.0"
XAUTHORITY="/home/naruto/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"
0 * * * * /home/naruto/Hour-sound.sh
mplayer
およびspd-say
コマンドは正しく実行されますが、notify-send
コマンドは正しく実行されません。また、エラーをファイルにリダイレクトしようとしました:
0 * * * * /home/naruto/Hour-sound.sh 2>/tmp/error
しかし、それは出力を示しませんでした。何が間違っていますか?
おそらくあなたの質問に対するコメントで見たように、/etc/cron.hourly
(および他の同様のディレクトリ)のcronjobsはrun-parts
によって実行されます。 run-parts
は、ファイル名について少しうるさいです。デフォルトでは、ファイル名に(ASCIIのすべて)以外のものが含まれるファイルは実行されません。
したがって、スクリプトのファイル名が「myscript.sh」などの場合、run-parts
はドットを好まないため、無視されます。
1つの問題は、cronからグラフィカルアプリケーション(notify-send
)を実行しようとしていることです。それには少し調整が必要です。実行中のXセッションに接続できるようにcrontabでXAUTHORITY
およびDISPLAY
変数を設定する必要があり、XDG_RUNTIME_DIR
を設定してpulseaudioセッションに接続できるようにする必要があります。残念ながら、これらはcrontab自体で設定する必要があるため、/etc/cron.hourly
は使用できません。代わりに、crontab -e
を実行し、次の行を追加します。
DISPLAY=":0.0"
XAUTHORITY="/home/YOURUSERNAME/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"
0 * * * * /path/to/script.sh
XDG_RUNTIME_DIR
の値を、端末からecho
するときに返される値に変更します。私のシステムでは、これは次のとおりです。
$ echo $XDG_RUNTIME_DIR
/run/user/1001
おそらく同じですが、最初に確認してください。これで、スクリプトは1時間ごとに実行され、期待どおりに動作するはずです。
.sh
で終わるスクリプトは、/etc/cron.hourly
フォルダーでは実行されません。
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=308911
run-pars(/etc/cron.dailyなど)によって処理されるディレクトリ内のリンクまたはバイナリは、periodが名前の一部。
スクリプトの名前を変更します
mv /etc/cron.hourly/Hour-sound.sh /etc/cron.hourly/Hour-sound
または、スクリプト呼び出しを
/etc/crontab
.sh
で終わることができます
拡張子付きスクリプト(abc.sh)を使用して、必要な場所を追加しないでください。 (cron.hours)。
コードをabcファイルに追加して保存します(必要に応じて)(これはbashコマンドである必要があります)
つかいます
Sudo chmod +x abc
実行可能ファイルを作成するコマンド。
edit etc/cronrtab file
数分から数時間までの行の定義済みの数行が編集されて保存されています。
その後、正常に実行されます。