Cronjob 无法正常运行

Cronjob 无法正常运行

我有这个 sh 脚本:

ufw allow 27017 && iptables -F

在文件 test.sh 中

我想每天 07:00 使用 root 的 cronjob 运行它,如下所示:

0 7 * * * /root/cron/test.sh

我还检查了这个脚本是否确实使用 grep CRON /var/log/syslog 运行,我可以看到它确实运行了:

8 月 24 日 07:00:01 vps118774 CRON[1672]: (root) CMD (/root/cron/test.sh)

现在我的问题是 test.sh 中的实际脚本无法正确运行以解锁使用该 cronjob 运行的端口,重点是如果我使用以下命令从服务器上的终端手动运行该脚本:

sh script.sh

一切正常,脚本将采取所需的操作,因此脚本按预期运行,但是我的 cron 执行有什么问题吗?

我把执行日志得到了这些:

root/cron/test.sh: 2: /root/cron/test.sh: ufw: 未找到

答案1

Cron 作业在 shell 环境中运行,该环境可能与普通的交互式 shell 环境不同。例如,该PATH变量中可能包含不同目录的列表,并且可能缺少一些您习惯于从中执行实用程序的目录。

找出ufw实用程序所在的位置(command -v ufw在命令行上使用),然后

  1. 在脚本中使用该实用程序的完整路径,或者
  2. 修改PATH脚本内的变量,使其包含可以找到ufw实用程序(和)的目录。iptables

如问题所示,该脚本缺少正确的#!- 行。如果您显式运行它,这不是问题sh,但您不会在 cron 作业规范中这样做。相反,使脚本可执行,然后将其编写为

#!/bin/sh

PATH="$PATH:/usr/sbin:/sbin"

ufw allow 27017 && iptables -F

然后从 crontab 中调用脚本,就像您当前所做的那样。

在这里,我还将两个目录/usr/sbin和添加/sbinPATH变量中,只是为了展示如何在脚本中执行此操作。

相关内容