0

cron でスクリプトをジョブとして実行しようとしています。

スクリプト:

echo "Defining function"
function talkMe() {
        echo "me"
}
echo "Start talking"
talkMe

cron ジョブ:

0 18 * * * /scripts/talk.sh > /tmp/talk.log

cron エラー:

Aug 23 11:24:01 database CRON[8497]: (root) CMD (/scripts/talk.sh > /tmp/talk.log)
Aug 23 11:24:01 database CRON[8494]: (CRON) error (grandchild #8497 failed with exit status 2)

test.log:

Defining function

ROOTパスワードを変更するためにこれを試みる前に、スクリプトは正常に機能していました:

sudo su
passwd <my new pass for root>

このコマンドは効果がないようで、ROOT は古いパスワードを使用し続けます... しかし、このコマンドの後、CRON の問題が発生しました!

スクリプトを正しく実行するには、どうすれば CRON の問題を解決できますか?

注: スクリプトを手動で実行すると、すべてうまくいきます!

4

3 に答える 3

5

あなたのスクリプトには、シバンラインがありません。次の行をスクリプトの先頭に挿入します。

#!/bin/bash

関数を定義するために別の構文を使用する別のシェルによってスクリプトが実行されている可能性があります。

于 2012-08-23T15:00:33.920 に答える
2

次のいずれかを試してください。/var/log/cron ログも確認してください

0 18 * * * /bin/bash /scripts/talk.sh > /tmp/talk.log
于 2012-08-23T15:00:33.863 に答える
2

@choroba は大きな問題を指摘しています。スクリプトにはシバンがないため、どのシェルで実行されているかわかりません。二次的な問題は、それfunctionが非標準であることです。bash はそれを許容 (つまり無視) しますが、他の一部のシェルはバーフします。それ:

$ function talkMe() {
sh: Syntax error: "(" unexpected
$ echo $?
2

(ここでの終了ステータスは、ログの内容と一致することに注意してください。)

どちらかの問題を修正するだけで動作するようになりますが、おそらく両方を修正するのが最善です:

#!/bin/bash
echo "Defining function"
talkMe() {
    echo "me"
}
echo "Start talking"
talkMe
于 2012-08-23T17:24:43.267 に答える