版本:Ubuntu 20.04.6 LTS
在我的 crontab 中,我有以下内容:
@reboot /home/<user>/startup.sh
其他输出:
<user>@eveng-gcp-v3:~$ ls -la | grep start
-rwxr-xr-x 1 root root 154 Dec 3 11:57 startup.sh
<user>@eveng-gcp-v3:~$ pwd
/home/<user>
脚本:
<user>@eveng-gcp-v3:~$ cat startup.sh
ip address add 192.168.0.1/24 dev pnet9
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o pnet0 -s 192.168.0.0/24 -j MASQUERADE
这 3 个命令是准确的,并且在手动运行时按预期工作。
我如何确保它在启动时运行?
答案1
执行 cron 脚本时网络接口尚未准备好。延迟它:
@reboot sleep [time in seconds] && /home/<user>/startup.sh
答案2
我怀疑您是否可以执行您的脚本,因为它缺少“舍邦”。添加#!/bin/sh
(或您最喜欢的 shell)。
此外,您还应该查看 syslog、orcron
的日志、orroot
的邮箱中的错误消息。
答案3
问题是我正在使用自己用户的 crontab,而普通用户无法运行@reboot
作业。我使用 root 的 crontab ( sudo crontab -e
) 代替,它按预期工作了!
感谢大家!