如何通过 crontab 执行 shell 脚本?

Ara*_*ind 30 linux crontab

我有一个notify.sh看起来像的脚本:

notify-send "hi welcome"
Run Code Online (Sandbox Code Playgroud)

我下午 2 点的 crontab 通知:

0 14 * * * home/hacks/notify.sh
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用。问题是什么?

Phi*_*l P 44

您的脚本缺少 #! 开头的一行,这是内核解释的魔术,用于说明脚本将使用哪个命令解释器。

让它看起来像这样:

#!/bin/sh
notify-send "hi welcome"
Run Code Online (Sandbox Code Playgroud)

并确保脚本是可执行的:

ls -l home/hacks/notify.sh
chmod +x home/hacks/notify.sh
ls -l home/hacks/notify.sh
Run Code Online (Sandbox Code Playgroud)

另外,由于您要求每天只发生一次,crontab 的时区是否与您自己的时区相同?您可能会在格林威治标准时间下午 2 点发现这种情况。


Ara*_*ind 22

使 crontab 运行很容易。这里我要说的是如何运行 crontab 作业。它对任何卡在 crontab 上的人都很有用。

*/1 * * * * cd /home/hacks && sh notify.sh
Run Code Online (Sandbox Code Playgroud)

要使脚本可执行,我们必须执行以下操作:

chmod +x home/hacks/notify.sh
Run Code Online (Sandbox Code Playgroud)

在这里,我每隔一分钟运行这个脚本......通过执行以下脚本,您可以将其写入日志文件中以查看其是否正常工作

写日志

*/1 * * * * cd /home/hacks && sh notify.sh>>test.log
Run Code Online (Sandbox Code Playgroud)

发邮件

*/1 * * * * cd /home/hacks && sh notify.sh>>test.log | mail -s "Hi this is example" user@domain.com
Run Code Online (Sandbox Code Playgroud)

  • 是不是“*/1 * * * * sh /home/hacks/notify.sh”也可以工作? (2认同)

lor*_*zog 5

4 假设:

  • cron 守护进程没有运行(做一个ps axfww | grep cron检查)

  • 通知发送试图将输出发送到终端或 X 会话——但它是从cron环境中运行的,它不知道“与谁交谈”,可以这么说。

  • 您的脚本不可执行

  • home/crontab 脚本中的路径相对于脚本被执行的用户。尝试使用完整路径