スクリプトは手動で実行されますが、cronでは実行されません。

スクリプトは手動で実行されますが、cronでは実行されません。

私のMySQLレプリケーションの状態に基づいて監視します。次のコードを使用して単純なシェルスクリプトを作成しました。

#!/bin/bash
date > /tmp/mysql_repl_status.txt
cd /usr/bin/
"/usr/bin/mysql" "-e" "SHOW SLAVE STATUS \G" >> /tmp/mysql_repl_status.txt
mail -s "Netspective MySQL replication status" [email protected] < /tmp/mysql_repl_status.txt

問題は、このスクリプトを手動で実行すると正しく機能しますが、cronを使用するとスクリプトが機能しないことです。

dateコマンドの出力のみを含むメッセージを取得するには、cronを使用します。私にとって何が問題ですか?

ベストアンサー1

さまざまな可能性:

  1. Cronはcronで実行されているスクリプトに完全なユーザーエクスペリエンスを渡しません。したがって、$ PATHなどの変数は、cronで実行されているときとユーザー端末で実行されているときに異なる場合があります。

  2. Cronでは各行の末尾に改行文字が必要なので、crontabファイルの末尾には必ず空行を残してください。


スクリプトにフルパスを指定し、それが起動することを確認することもできます。

#!/bin/bash
statfile=/tmp/mysql_repl_status.txt
/bin/date > $statfile
cd /usr/bin
/usr/bin/mysql -e "SHOW SLAVE STATUS \G" >> $statfile
/bin/mail -s "Netspective MySQL Replication Status" [email protected] < $statfile

おすすめ記事