コマンドラインから実行するときに動作するスクリプトがありますが、それを使用してスケジュールすると、ファイルまたはcron
コマンドが見つからないというエラーが発生します。私の質問は2つあります。
cronジョブのスケジュールに使用するときは、
crontab -e
権限の基礎として私のユーザーIDを使用しますか?それとも、ある種のcronユーザーIDと関連する権限を使用しますか?クローンジョブの開始時に作業ディレクトリは何ですか?実行するスクリプトを指定するディレクトリですか、それとも別のディレクトリですか?
これは私のクローンの仕事です。
15 7 * * * /home/xxxx/Documents/Scripts/email_ip_script.sh
実際のスクリプトは次のとおりです。
vIP_ADDR="`curl automation.whatismyip.com/n09230945.asp`"
echo "$vIP_ADDR"
sed "s/IPADDR/$vIP_ADDR/g" template.txt > emailmsg.txt
ssmtp [email protected] < emailmsg.txt
mail
以下は、生成されたメッセージを表示したときに表示されるエラーですcron
。
sed: can't read template.txt: No such file or directory
/home/xxxx/Documents/Scripts/email_ip_script.sh: line 15: ssmtp: command not found
見つかりませんが、template.txt
スクリプトと同じディレクトリにあります。また、動作しませんが、ssmtp
ユーザーとして行うことができます。これを行うために私は何を見逃していますか?
ベストアンサー1
cd /home/xxxx/Documents/Scripts/
このディレクトリでタスクを実行するには、追加してください。 cronが特定のディレクトリに変更される理由はありません。 Cronはホームディレクトリからコマンドを実行します。
それはssmtp
あなたのデフォルトではないかもしれませんPATH
。 Cronのデフォルトパスは実装によって異なりますので、マニュアルページを確認してください。ただし、デフォルトパスではなくルートにのみssmtp
存在する可能性が高いです。/usr/sbin
PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
15 7 * * * cd /home/xxxx/Documents/Scripts && ./email_ip_script.sh