如何通过crontab执行shell脚本?


22

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

notify-send "hi welcome"

我下午2点的crontab通知:

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

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

Answers:


39

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

使它看起来像这样:

#!/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点发现这种情况。


+1这个答案很棒-特别要注意有关脚本必须可执行的要点!谢谢!
FXQuantTrader 2015年

非常微妙的解释。我的
投票

18

使crontab运行仅是容易的。在这里,我要说的是如何运行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

2
是不是“ * / 1 * * * * sh /home/hacks/notify.sh”也可以工作?
user1179459

5

4个假设:

  • cron守护程序未运行(执行ps axfww | grep cron并检查)

  • notify-send试图将输出发送到终端或X会话-但是它是从cron环境中运行的,因此它不知道“与谁交谈”。

  • 您的脚本不可执行

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


1

export DISPLAY=:0在脚本中的通知发送行上方添加。这解决了洛内佐格的第二点。


0

您必须通过以下命令打开crontab:

crontab -u username -e (to edit) -l(to list) -r(to remove) 10(minutes) 8-15(hours) *(Day of month) *(month) 1,3,5(days of week) /path/to/script/script_name.sh

这将在每个星期一,星期三和星期五的每小时10点后的晚上8点至下午3点每小时运行一次脚本。


0

首先,我们需要使用Command编辑crontab,crontab -e然后在其中Crontab添加Executable脚本路径,并在您的Case中添加如下代码 * 14 * * * home/hacks/notify.sh >/dev/null 2>&1

启动/停止/重启cron服务

  • /etc/init.d/crond start /stop / restart
  • service crond start /stop /restart
  • systemctl stop crond.service

systemctl stop crond.service


-2

非常简单,通过以下方法在crontab文件的底部添加以下行: sudo nano /etc/crontab

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


这似乎不是这个问题的答案。
Ljm Dullaart
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.