notify.sh
次のようなスクリプト:
notify-send "hi welcome"
午後2時のcrontab通知:
0 14 * * * home/hacks/notify.sh
ただし、これは機能しません。何が問題ですか?
スクリプトに#がありません!最初の行。これは、スクリプトで使用するコマンドインタープリターをカーネルが解釈する魔法です。
次のようにします。
#!/bin/sh
notify-send "hi welcome"
スクリプトが実行可能であることを確認します。
ls -l home/hacks/notify.sh
chmod +x home/hacks/notify.sh
ls -l home/hacks/notify.sh
また、これを1日に1回だけ行うように要求しているので、crontabのタイムゾーンは自分のタイムゾーンと同じですか?これは、グリニッジ標準時午後2時に発生する場合があります。
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" [email protected]
4つの仮説:
cronデーモンが実行されていません(ps axfww | grep cron
およびチェック)
notify-sendは出力を端末またはXセッションに送信しようとしていますが、cron
環境内から実行されており、いわば「だれと対話するか」がわかりません。
スクリプトは実行可能ではありません
home/
crontabスクリプト内のパスは、スクリプトが実行されるユーザーに対する相対パスです。フルパスを使用してみてください
追加 export DISPLAY=:0
スクリプトのnotify-send行の上。これは、lornezogの2番目のポイントに対処します。
次のコマンドでcrontabを開く必要があります。
crontab -u username -e (to edit) -l(to list) -r(to remove) 10(minutes) 8-15(hours) *(Day of month) *(month) 1,3,5(days of week) /path/to/script/script_name.sh
これにより、毎週月曜日、水曜日、金曜日の午前8時から午後3時までの1時間に1回、毎時10分にスクリプトが実行されます。
まず、コマンドcrontab -e
を使用してcrontabを編集し、このCrontab
内に実行可能スクリプトのパスを追加して、この場合は* 14 * * * home/hacks/notify.sh >/dev/null 2>&1
のようにします。
cronサービスの開始/停止/再起動
/etc/init.d/crond start /stop / restart
service crond start /stop /restart
systemctl stop crond.service
systemctl stop crond.service