Cronジョブのリストがあります。
00 21 * * * sh ~/db_backup.sh
20 21 * * * sh ~/update.sh
* 5 1 * * sh ~/db_vacuum.sh
最初のジョブは、Ubuntuサーバーで実行しているデータベースのバックアップを作成します。これは、バックアップファイルが最後に変更された日付を確認するときに機能します。
date -r db.sql
私の3番目のcronジョブは、毎月の始めにdbをバキュームします。私の問題は2番目の仕事です。このジョブは、実行中のDjangoアプリケーションでいくつかのURLコールバックを実行します。
Sudo docker exec -it web_1 wget -t 0 "http://127.0.0.1:8080/admin/command1"
Sudo docker exec -it web_1 wget -t 0 "http://127.0.0.1:8080/admin/command2"
Sudo docker exec -it web_1 wget -t 0 "http://127.0.0.1:8080/admin/command3"
Sudo docker exec -it web_1 wget -t 0 "http://127.0.0.1:8080/admin/command4"
予想される出力を確認しましたが、ファイルがまったく実行されなかったようです。奇妙なのは、次のコマンドを使用して手動で実行した場合です。
sh ~/update.sh
それは完璧に実行されますが、私が行方不明になっているwgetsでキャッチがありますか?明らかでない場合、wgetコマンドはサーバーを実行しているdockerコンテナーを指しています。
更新:
ログファイルを.shファイルのwgetコマンドに出力ファイルとして添付しようとしました。設定されたcronジョブの実行時間後に確認した後、ディレクトリにログファイルがありませんでした。
その後、実際のシステムログを確認しましたが、.shファイルが実行されてから2番目にこのメッセージがログに表示されることに気付きました。
(CRON) info (No MTA installed, discarding output)
これは何らかの形で関係しているのでしょうか?
問題は、スクリプトでSudo
を使用していることです。 Cronはnever Sudoパスワードを入力できます。
Shを使用してcronjobを起動しますが、shはbashのサブセットであり、cronjobを実行できない場合があります。また、タスクを手動で実行することは、必ずしもcronで実行することと同じではありません。 cronjobでshをbashに変更して、何が起こるかを確認してください。
ログファイルに表示されるMTAに関するエラーメッセージは、Mail Transfer Agentがインストールされていないことを意味します。つまり、メールメッセージを送信するソフトウェアがインストールされていないことを意味します。 Cronは、何かを知らせるためにメールメッセージを送信しようとします。失敗したcronjobに関するエラーメッセージである可能性があります。