2017-09-14 5 views
1

ackはlinuxのcrontabを使用して何も出力しません。 (sudo crontab -eで編集)crontabファイルで ackはlinuxのcrontabを使用しないで出力します

39 20 * * * /ext/test110.sh 

そしてcat /ext/test110.sh

#! /bin/sh 

/usr/bin/ack "localhost" /etc/hosts > /ext/1.t 
which ack > /ext/2.t 

はcronをした後、/ext

で1.tと2.tがあります表示されますcat 2.t/usr/bin/ackを出力します。 ただし、1.tには何もありません。

私はbashでack "localhost" /etc/hosts > /ext/3.t(4.3.30)を実行する場合やshを直接、 それの出力は以下となります。127.0.0.1 localhost

それはackはcronをして働くことができないようです。バグはどこですか?ありがとうございました。

uname -a

Linux xxx 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt25-2 (2016-04-08) x86_64 GNU/Linux 

2.14 ACK、

+0

動作しません。ありがとうございました。 @Inian –

+0

'which ack'を実行してから、その値をとり、あなたのスクリプトの中であなたの呼び出しの中でそれを使用してください。つまり、あなたのスクリプトに '/ full/path/to/ack'を使います。それ以外の場合は、その値を 'PATH'変数に追加します。この種のQは毎日尋ねられます。検索機能の使用方法を学んでください。がんばろう。 – shellter

+0

@shellter、それは動作しません。あなたの答えはInianのものと同じです。ありがとうございました。 –

答えて

1

Ackは、おそらくエラーを投げていますが、配管のみであるため、あなたが表示されないのPerl 5.20.2は/ usr/binにで/ perlの下に実行stdoutとerrorはstd errに書き込まれます。

親指のルールは、あなたが正当な理由がない限り、常にcronログで標準エラーを取得してください。

コマンドを使用して、ストリームをリダイレクト:

[stream-no]>[destination] 

一切ストリームなしはbashがそうstdoutに対応する1にデフォルト設定されます指定されていない場合:

>/file == 1>/file 

をあなたが標準エラー出力を使用して標準エラー出力を行うことができますfile-no 2.ファイルにstderrを送信するには:

2>/file 

ストリームを別のストリームに送信するには、次のコマンドを使用します。 &ファイル番号は宛先として指定します。 stderrをstdoutと同じ場所に送信することができます:

2>&1 

このスクリプトを試してみてください。 ackを実行し、stderrをstdoutと一緒にfile-no 1に送信してから、ファイル1に入ってくるすべてをログファイルに送信します。

/usr/bin/ack "localhost" /etc/hosts 2>&1 > /ext/1.t 

出力を確認します。私は今あなたが知的に修正することはできませんいくつかのテキストを、おそらくエラーが賭ける。

+0

'/ usr/bin/ack" localhost "/ etc/hosts 2>&1>/ext/1.t'では何も変更されません。ありがとうございました。あなたのLinuxでテストしましたか? BTWは、エラーがある場合、cronはメールを送信します。ただし、電子メールは受信されませんでした。 –

+0

は '...> log 2>&1'ではないのですか?以前は違いを生み出していました;-)。それ以外の場合は、ストリームリダイレクトの非常に患者の説明!皆さんお元気で。 – shellter

+0

まだ動作しませんが、@ shelter。正確には、ストリームリダイレクトが明確に説明されています。ありがとうございました。 –

関連する問題