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)

测试日志:

Defining function

在我尝试更改 ROOT 密码之前,该脚本运行良好:

sudo su
passwd <my new pass for root>

此命令似乎没有效果,ROOT 继续使用旧密码......但是在此命令之后,出现了 CRON 问题!

如何解决 CRON 问题,以正确运行脚本?

注意:手动运行脚本,一切正常!

4

3 回答 3

5

你的剧本没有 she-bang 台词。将此行插入脚本顶部:

#!/bin/bash

脚本可能由使用不同语法定义函数的不同 shell 运行。

于 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 指出了主要问题:您的脚本没有 shebang,所以您不知道它在哪个 shell 中运行。次要问题是function非标准的 - bash 容忍(即忽略)它,但其他一些 shell 会呕吐它:

$ 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 回答