使 crontab 工作时出现问题。

使 crontab 工作时出现问题。

嘿大家好,我对 Linux 还很陌生,仍在学习,所以希望这对你们来说会很容易。

我正在尝试进一步了解如何使用 cron 在我的 ubuntu 机器上安排事件。目前我有一个脚本 (script.sh),如下所示:

#!/bin/bash

echo "I work" 

我以 root 身份(sudo -i)登录终端并输入:

sudo bash /home/lskidson/tests/script.sh 

当我这样做时,它会正确执行脚本。(仍然以 root 身份登录)我设置了一个 crontab,每分钟执行一次此脚本,但我无法让它工作,如下所示(我使用 crontab -e 进行设置)

* * * * * sudo bash /home/lskidson/tests/script.sh

我将其写入文件,然后当我打印作业列表(crontab -l)时,它会按照我的要求正确显示。但是,脚本从未运行过。

你们对可能出现的问题有什么一般性建议吗?如果需要,我可以提供更多信息。提前致谢!

答案1

首先,#!/bin/bash你已经定义了一个 Bash 脚本。下一步是创建文件可执行文件bash在没有命令的情况下运行它:

chmod +x /home/lskidson/tests/script.sh 

一般情况sudo下 该命令不适用于crontab。如果需要以 root 身份运行 Cronjob,可以使用 root 的 crontab,可以通过 该命令实现sudo crontab -e

现在我们可以进入 Crontab 的问题了。你期望在哪里收到“我在工作”的消息?这种情况很少见。

1.如果可执行文件生成输出文件,或者仅修改某些内容,则 Cron 作业应该是:

* * * * * /home/lskidson/tests/script.sh 

2.如果程序不写入任何输出文件而只是在标准输出(就像你的情况一样),你应该重定向将其保存到文件中以将其放入适当的位置(此部分2>&1将错误消息重定向至标准输出)

* * * * * /home/lskidson/tests/script.sh >> /home/lskidson/tests/script.sh.log 2>&1

3.虽然 stdout 没有重定向,但 Cron 会发送本地邮件给用户(如果您的本地邮件设置正确),除非通过设置变量来MAILTO覆盖crontab

MAILTO="[email protected]"
* * * * * /home/lskidson/tests/script.sh

参考:

答案2

您怎么知道它永远不会运行?它不会在您的终端上回显。首先删除 sudo...它永远不应该出现在 cronjob 中。root 的 crontab 以 root 身份运行,用户的 crontab 以用户身份运行,相应地放置您的脚本。

将输出通过管道传输到文件,如下所示

echo "I work" > /path/to/some/file.txt

或者

* * * * * /home/lskidson/tests/script.sh > /path/to/some/file.txt

使用 > 覆盖文件,使用 >> 附加到文件。

相关内容