2009-12-10 08:38:25 +0000 2009-12-10 08:38:25 +0000
22
22

如何通过crontab执行shell脚本?

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

notify-send "hi welcome"

我的crontab通知是下午2点的:

0 14 * * * home/hacks/notify.sh

然而,这并不奏效。问题出在哪里?

答案 (6)

38
38
38
2009-12-10 09:04:32 +0000

你的脚本在开始的时候少了一行#!,这是由内核解释的魔法,用来说明脚本要使用哪个命令解释器。

让它看起来像这样。

#!/bin/sh
notify-send "hi welcome"

确保脚本是可执行的。

ls -l home/hacks/notify.sh
chmod +x home/hacks/notify.sh
ls -l home/hacks/notify.sh

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

18
18
18
2010-03-25 06:05:09 +0000

在这里我要说的是如何运行crontab工作。这对任何被crontab卡住的人都很有用。

*/1 * * * * cd /home/hacks && sh notify.sh

为了使脚本可执行,我们必须这样做:

chmod +x home/hacks/notify.sh

在这里,我每隔一分钟就运行这个脚本…… 通过执行下面的脚本,你可以把它写到一个日志文件中,以了解它是否工作

写日志

*/1 * * * * cd /home/hacks && sh notify.sh>>test.log

发送邮件

*/1 * * * * cd /home/hacks && sh notify.sh>>test.log | mail -s "Hi this is example" user@domain.com
``` 。
5
5
5
2009-12-10 08:42:40 +0000

4个假设:

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

  • notify-send试图向终端或X会话发送输出 – 但它是在cron环境中运行的,它不知道 “和谁说话",可以这么说。

  • 你的脚本不可执行

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

1
1
1
2012-03-11 00:33:46 +0000

在你的脚本中的notify-send行上面添加export DISPLAY=:0。这解决了lornezog的第二点。

0
0
0
2015-10-24 12:00:18 +0000

首先,我们需要用命令0x6编辑crontab,然后在这个0x6里面添加可执行脚本的路径,在你的例子中,就像这样crontab -e

启动/停止/重新启动cron服务

  • Crontab
  • * 14 * * * home/hacks/notify.sh >/dev/null 2>&1
  • /etc/init.d/crond start /stop / restart
  • service crond start /stop /restart

systemctl stop crond.service。

-2
-2
-2
2018-12-28 16:01:47 +0000

很简单,在crontab文件底部添加以下一行via:sudo nano /etc/crontab

@reboot root cd /home/pi/node-sonos-http-api && npm start &