2009-12-10 08:38:25 +0000 2009-12-10 08:38:25 +0000
22
22

crontab経由でシェルスクリプトを実行するには?

notify.shのスクリプトは次のようになっています。

notify-send "hi welcome"

午後2時の私のcrontab通知。

0 14 * * * home/hacks/notify.sh

しかし、これがうまくいきません。何か問題があるのでしょうか?

回答 (6)

38
38
38
2009-12-10 09:04:32 +0000

これはカーネルがどのコマンドインタプリタがスクリプトに使用されるかを示すために解釈する魔法です。

以下のようにしてください。

#!/bin/sh
notify-send "hi welcome"

のようにして、スクリプトが実行可能であることを確認してください。

ls -l home/hacks/notify.sh
chmod +x home/hacks/notify.sh
ls -l home/hacks/notify.sh

また、これを一日に一度だけ発生させたいとのことですが、crontabのタイムゾーンはあなたのタイムゾーンと同じですか?これはグリニッジ標準時の午後2時に発生しているかもしれません。

18
18
18
2010-03-25 06:05:09 +0000

crontabを動作させるのは簡単だが、ここではcrontabのジョブの動かし方を説明する。crontabに行き詰っている人には参考になると思います。

*/1 * * * * cd /home/hacks && sh notify.sh
chmod +x home/hacks/notify.sh

ここでは、このスクリプトを1分ごとに実行しています。以下のスクリプトを実行することで、ログファイルに書き込んで動作しているかどうかを確認することができます

ログの書き込み

*/1 * * * * cd /home/hacks && sh notify.sh>>test.log

メールの送信

*/1 * * * * cd /home/hacks && sh notify.sh>>test.log | mail -s "Hi this is example" user@domain.com
5
5
5
2009-12-10 08:42:40 +0000

4つの仮説:

  • cronデーモンが実行されていない(ps axfww | grep cronで確認)

  • notify-sendはターミナルやXセッションに出力を送ろうとしているが、cron環境内で実行されているため、いわば「誰に話しかけるべきか」がわからない。

  • あなたのスクリプトは実行可能ではありません

  • crontabスクリプトのhome/パスは、スクリプトが実行されるユーザからの相対パスです。フルパスを使ってみてください。

1
1
1
2012-03-11 00:33:46 +0000

スクリプトの通知送信行の上に export DISPLAY=:0 を追加してください。これは lornezog の二番目のポイントに対応しています。

0
0
0
2015-10-24 12:00:18 +0000

まず、crontabをコマンドcrontab -eで編集し、このCrontabの中に実行スクリプトのパスを追加します。 * 14 * * * home/hacks/notify.sh >/dev/null 2>&1 .

Start /Stop / restart cron service

  • /etc/init.d/crond start /stop / restart
  • service crond start /stop /restart
  • systemctl stop crond.service

systemctl stop crond.service

-2
-2
-2
2018-12-28 16:01:47 +0000

簡単なことですが、crontabファイルの下部に以下の行を追加します。

関連する質問

6
10
5
37
6