如何通过 crontab 执行 shell 脚本?

如何通过 crontab 执行 shell 脚本?

我有一个notify.sh如下脚本:

notify-send "hi welcome"

我的 crontab 下午 2 点通知:

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

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

答案1

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

让它看起来像这样:

#!/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 点。

答案2

让 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" [email protected]

答案3

4个假设:

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

  • 通知发送 (notify-send) 尝试将输出发送到终端或 X 会话 - 但是它是在环境内部运行的cron,并且它不知道“与谁对话”,可以这么说。

  • 你的脚本不可执行

  • crontab 脚本中的路径home/与执行脚本的用户相关。请尝试使用完整路径

答案4

首先,我们需要使用命令编辑 crontab crontab -e,然后在其中Crontab添加可执行脚本的路径,在您的情况下像这样 * 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 停止 crond.service

相关内容