嘿大家好,我对 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
使用 > 覆盖文件,使用 >> 附加到文件。