foo.sh
次の非常に簡単なシェルスクリプト()があります。
#!/bin/bash
echo -n "$USER,$(date)," `binary -flags | sed -e '1,30d'`;
exit 0;
スクリプトはいくつかの出力を準備した後、次のようにテキストファイルに追加する必要があります。
foo.sh >> data.csv
ルートプロンプトで上記のコマンドを実行すると正常に動作します。しかし、私の(root)crontabに同じコマンドを入力すると、次のようになります。
05 * * * * /root/foo.sh >> /path/to/data.csv
crontab出力が異なります!私はこれを期待していなかったので、なぜそれを理解していません。以下の例をご覧ください。
Expected, normal output from running my .sh (example):
Fri Jun 14 16:32:34 CEST 2013,20130614163304,268828672,71682561
The output written to the file by cron:
Fri Jun 14 16:32:34 CEST 2013,
.shでバイナリを実行する権限は次のとおりです。
-rwxr-xr-x 1 root root
出力が異なる理由は何ですか?私のCSVファイルに正しい出力を置くにはどうすればよいですか?
ベストアンサー1
同じことを期待することはできません環境cron
プログラムでは対話的に実行されます。この場合、2つの違いが重要な場合があります。
現在の作業ディレクトリ
これ
PATH
上記のようにjordanm
、2つのうちの1つまたは2つの組み合わせにより、スクリプトがプログラムを見つけることbinary
ができなくなります。
ローカルシステムメールを確認すると(たとえば、を実行してmailx
)、この失敗について文句を言うメッセージを見つけることができます。
crontab
実行する項目とスクリプトを作成するときは、既知のプログラムの場所へのパスをcron
ハードコードすることが標準的な方法です。