并非所有 shell 脚本都可以使用 crontab

并非所有 shell 脚本都可以使用 crontab

我有一个运行 apache 的小型 VPS 和一个 Minecraft 服务器。我从来没有关闭过它,但如果我出于某种原因重新启动它,IPTables 会阻止我的大部分端口,包括端口 80。我已经尝试了很多不同的建议来解决此问题,但没有成功。另外,由于提供商是 OVH,因此缺乏支持。

因此,我创建了一个解决方法,我对此感到满意。我创建了一个简单的 shell 脚本文件来打开重新启动时需要打开的某些端口(目前为 80 和 25565)。 21、22等重要的,重启后不受影响。

该脚本如下所示:

iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p udp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 25565 -j ACCEPT
iptables -I INPUT -p udp --dport 25565 -j ACCEPT
/sbin/service iptables save

当我通过输入手动运行它时/iptdef.sh,它运行良好,端口打开,一切都很好。

当然,每次重新启动服务器时都要记住运行它是不切实际的,所以我添加了一个 crontab。问题是,它无法工作/运行。这是我的 crontab 文件:

*/5 * * * * /backup2.sh
*/55 * * * * /backup3.sh
@reboot /iptdef.sh
* * * * *  /iptdef.sh

前两行有效。它们只是为我备份文件夹的简单脚本。第二行是不起作用的。

是否有可能无法从 cron 运行 iptables 命令?这听起来很愚蠢,但我看不出它不起作用的任何其他原因。脚本具有正确的权限。

答案1

这是因为 cron 强制设置PATH/usr/bin:/bin.您需要调用iptablesas/sbin/iptables或添加PATH=/usr/sbin:/sbin:/usr/bin:/bin到脚本或 crontab 中。有关详细信息,请参阅 crontab(5)。

答案2

看起来这里已经很好地涵盖了:crontab 的 @reboot 只适用于 root?基本上,答案在很大程度上取决于您使用的 Cron 和 Linux 发行版。

答案3

我必须添加此内容/etc/hosts,以便解析发送给我服务器自己的 FQDN 上的任何人的邮件:

127.0.0.1 mydomain.com.

注意末尾的点。就我而言,我基本上是向 root@localhost 发送电子邮件,并将其MAILTO=root翻译为[电子邮件受保护]

这是有关此答案的更多详细信息。

相关内容