私は定期的に、SSH を使用してサーバーに接続するシェル スクリプトを Crontab 経由で実行しています。そのスクリプトを手動で実行すると、正常に実行されます。同じセッション内では、Crontab でも正常に実行されます。しかし、マシンを再起動して Crontab がスクリプトを開始するのを待つと、失敗します。
私のマシンと接続先のサーバーは両方とも、お互いにパスワードのないキーを持っています。
私のスクリプト内の SSH コマンド:
ssh -i /home/myuser/.ssh/id_rsa -t -t myuser@servername 'some-script-on-the-server'
Crontabコマンド:
45 10 * * * root sudo -u myuser my-local-script
SSH コマンドを提供することでこの問題を解決できると思いましたが-i /home/myuser/.ssh/id_rsa
、それでもその後は機能しませんでした。
出力は次のよう/var/log/syslog
になります。
May 23 11:06:01 mycomputer CRON[1254]: (root) CMD (sudo -u myuser my-local-script)
May 23 11:06:01 mycomputer CRON[1252]: (CRON) info (No MTA installed, discarding output)
どうしたの?
答え1
「MTA がインストールされていません」とは、スクリプトでメールを送信したいが、MTA (メール転送エージェント) が指定されていないことを意味します。cron デーモンは実際に出力を送信しようとします。MTA (postfix など) をインストールするか、出力が重要でない場合は「/dev/null 2>&1」にリダイレクトすることができます。