带有函数的linux cron脚本没有运行

时间:2012-08-23 14:38:53

标签: linux bash cron ubuntu-server

我正在尝试将脚本作为cron中的一个作业运行。

剧本:

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

cron工作:

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

cron errror:

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问题,正确运行脚本?

注意:手动运行脚本,一切都很顺利!

3 个答案:

答案 0 :(得分:5)

你的剧本没有她的行。将此行插入脚本的顶部:

#!/bin/bash

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

答案 1 :(得分:2)

尝试以下一项。还要检查/ var / log / cron logs

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

答案 2 :(得分:2)

@choroba指出了主要问题:你的脚本没有shebang,所以你不知道它运行的是什么shell。第二个问题是function是非标准的 - bash容忍(即忽略)它,但是其他一些炮弹会对它进行抨击:

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

(请注意,此处的退出状态与日志中的内容相符。)

修复任何一个问题应该足以让它工作,但最好同时解决这两个问题:

#!/bin/bash
echo "Defining function"
talkMe() {
    echo "me"
}
echo "Start talking"
talkMe