web-dev-qa-db-ja.com

crontabを介してシェルスクリプトを実行する方法

notify.sh次のようなスクリプト:

notify-send "hi welcome"

午後2時のcrontab通知:

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

ただし、これは機能しません。何が問題ですか?

22
Aravind

スクリプトに#がありません!最初の行。これは、スクリプトで使用するコマンドインタープリターをカーネルが解釈する魔法です。

次のようにします。

#!/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時に発生する場合があります。

38
Phil P

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]
18
Aravind

4つの仮説:

  • cronデーモンが実行されていません(ps axfww | grep cronおよびチェック)

  • notify-sendは出力を端末またはXセッションに送信しようとしていますが、cron環境内から実行されており、いわば「だれと対話するか」がわかりません。

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

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

5
lorenzog

追加 export DISPLAY=:0スクリプトのnotify-send行の上。これは、lornezogの2番目のポイントに対処します。

1
W_Whalley

次のコマンドで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分にスクリプトが実行されます。

0

まず、コマンド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

0
kunal