cronを使用して実行するときとシェルスクリプトを手動で実行するときに出力が異なるのはなぜですか? [コピー]

cronを使用して実行するときとシェルスクリプトを手動で実行するときに出力が異なるのはなぜですか? [コピー]

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つの違いが重要な場合があります。

  1. 現在の作業ディレクトリ

  2. これPATH

上記のようにjordanm、2つのうちの1つまたは2つの組み合わせにより、スクリプトがプログラムを見つけることbinaryができなくなります。

ローカルシステムメールを確認すると(たとえば、を実行してmailx)、この失敗について文句を言うメッセージを見つけることができます。

crontab実行する項目とスクリプトを作成するときは、既知のプログラムの場所へのパスをcronハードコードすることが標準的な方法です。

おすすめ記事