次のbashスクリプトがあります...
#!/bin/bash
# Delete JUNK temp folder
if [ -d JUNK/FOLDER/PATH ]
then
rm -rf JUNK/FOLDER/PATH
echo "Cleansed JUNK directory successfully!"
/usr/bin/mail -s "JUNK folder deleted successfully" [email protected] <<< "Success!"
else
/usr/bin/mail -s "JUNK folder not found" [email protected] <<< "Success!"
fi
以下のようにcrontabにあります。
* * * * * /bin/sh /home1/ramnath/public_html/myscripts/deltemp.sh
Q1:スクリプトが実行されないのはなぜですか?エラーがありますか?端末でスクリプトを手動で実行すると、エラーが発生します。
bash myscripts/deltemp.sh Cleansed JUNK directory successfully! myscripts/deltemp.sh: line 8: mail: command not found
======================
注:問題は解決しました。使ったばかりです
mailx -s "JUNK directory deleted" "[email protected]"
答え1
スクリプトに絶対パスを提供する必要があり、cron
スクリプトは$HOME
。
mail(1)
この古代プログラムがまだインストールされていない可能性があります。メンタルヘルスのためにスクリプトが実行する実行可能ファイルがある場合は、その実行可能ファイルのフルパスも指定してください。
一般的に言えば、どのPATH
追加の権限(別のユーザーとして自動的に実行されます)で実行されるスクリプトには、絶対パス、明示的な設定、またはフルパスを使用して実行可能ファイルを実行するためにいくつかの追加操作が必要です。これにより、奇妙なディレクトリで実行したり、間違った(または悪意のある)実行可能ファイルを選択したりするのを防ぎ、多くの問題を回避できます。
答え2
1)エラーはほとんど自明です。スクリプトがmail
バイナリを見つけることができません。インストールされていないかインストールされているが$ PATHにないため、それを呼び出してフルパス(たとえば/usr/bin/mail
)を指定する必要があります。
mail
2)EメールメッセージのDate:
ヘッダーにはすでにタイムスタンプがあるため、に渡されたペイロードにタイムスタンプを手動で追加する必要はありません。
Date: Fri, 22 Jan 2016 06:30:10 -0800
送信サーバーの時間が同期していることを確認してください(例:NTP経由)。