web-dev-qa-db-ja.com

/etc/cron.hourlyにスクリプトを入れても機能しないのはなぜですか?

/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

しかし、それは出力を示しませんでした。何が間違っていますか?

13
Black Block

おそらくあなたの質問に対するコメントで見たように、/etc/cron.hourly(および他の同様のディレクトリ)のcronjobsはrun-partsによって実行されます。 run-partsは、ファイル名について少しうるさいです。デフォルトでは、ファイル名に(ASCIIのすべて)以外のものが含まれるファイルは実行されません。

  • 大文字
  • 小文字
  • 下線
  • ダッシュ(「マイナス記号」)

したがって、スクリプトのファイル名が「myscript.sh」などの場合、run-partsはドットを好まないため、無視されます。

22

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時間ごとに実行され、期待どおりに動作するはずです。

5
terdon

.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で終わることができます

3
rubo77

拡張子付きスクリプト(abc.sh)を使用して、必要な場所を追加しないでください。 (cron.hours)。

コードをabcファイルに追加して保存します(必要に応じて)(これはbashコマンドである必要があります)

つかいます

Sudo chmod +x abc

実行可能ファイルを作成するコマンド。

edit etc/cronrtab file

数分から数時間までの行の定義済みの数行が編集されて保存されています。

その後、正常に実行されます。

1