web-dev-qa-db-ja.com

cronスクリプトがsudoで実行されていません

Bashスクリプトをcronjobとして呼び出そうとすると、いくつかの問題が発生します。これは実行しないです。

考えられる障害の原因を排除するために、次のことを行います。

  • Sudo crontab -e経由でcronを編集しました
  • スクリプトは毎晩午前4時に実行されることになっているため、コマンドは0 4 * * * bash ~/nightly_backup.sh
  • スクリプトは/home/myuser/nightly_backup.shにあります
  • スクリプトは完全に単独で実行され、ユーザー入力は不要です。
  • Sudo bash ~/nightly_backup.sh経由で手動で呼び出すと問題なく動作します
  • Crontabには、5分ごとに実行されるようにスケジュールされ、正常に機能する別のコマンドがあります(fswebcam -r ...

何が間違っていますか?

さらに、スクリプトが実行された場合に今日検索すると、次のようなsyslogが表示されます。

Feb  7 04:00:01 localhost CRON[7767]: (root) CMD (bash ~/nightly_backup.sh)
Feb  7 04:00:01 localhost CRON[7764]: (CRON) info (No MTA installed, discarding output)
Feb  7 04:00:03 localhost CRON[7765]: (CRON) info (No MTA installed, discarding output)
  • 「MTAがインストールされていない、出力を破棄する」とはどういう意味ですか?
1
taiBsu

基本的な問題は、現在のユーザーのhomeを参照する~を使用しているようです。

問題に関する詳細:

  • コマンドを手動で実行すると、~の値は/home/myusermyuser home)になります
  • Cronを使用してコマンドを実行すると、~の値は/rootroot home)になります

ファイルが/root/nightly_backup.shcronにないため、実行できません。

解決策:

交換:

0 4 * * * bash ~/nightly_backup.sh

と:

0 4 * * * /home/myuser/nightly_backup.sh

次のコマンドを実行して(一度)、シェルスクリプトが実行可能であることを確認する必要があります。

chmod +x /home/myuser/nightly_backup.sh

注:他の質問について

「MTAがインストールされていない、出力を破棄する」とはどういう意味ですか?

答えられました こちら

要するに:これは、cronジョブが出力を生成し、cronデーモンがその出力を電子メールで送信しようとするためです。システムにインストールされたサービス。

次のいずれかの方法で解決できます(詳細は here

  • メッセージを無視する
  • メールサーバーをインストールする
  • Cronジョブの出力を/ dev/nullにリダイレクトします
  • Cronジョブの出力をloggerにリダイレクトすると、syslogログに表示されます
3
Yaron