我正在尝试在我的 Ubiquity Edge Router 上设置一个 cron 作业,它将在工作日早上和晚上修改一次 hosts 文件,以在周一至周五上午 8 点到下午 7 点之间阻止各种网站。
我创建了两个 shell 脚本:
/config/scripts/set-blocking-hosts.sh
/config/scripts/set-default-hosts.sh
每行都有 2 行:
cp /etc/hosts.blocking /etc/hosts
/etc/init.d/dnsmasq restart
请注意,每个脚本中 cp 命令的第一行有所不同,以复制相应的文件(hosts.default 或 hosts.blocking)
如果我通过 ssh 进入路由器并直接运行这些脚本,它们就会按照我的要求运行,而且运行完美。
我无法使用 cron 按计划运行这些操作。
以下是我的 cron 条目:
0 8 * * 1-5 /config/scripts/set-blocking-hosts.sh
0 19 * * 1-5 /config/scripts/set-default-hosts.sh
到目前为止,我已经尝试使用crontab -e
和添加这些条目sudo crontab -e
,但似乎都没有起作用。
我查找了日志文件/var/log
但找不到任何相关内容。
如果我运行此命令,ps -ef | grep cron | grep -v grep
我会得到以下结果,表明 cron 正在运行。
root 490 1 0 Oct24 ? 00:00:09 /usr/sbin/cron
我不知道应该把 cron 条目放在哪里才能使作业运行,或者我是否需要重新启动路由器,或者某个地方是否关闭了某些东西,或者路由器是否不支持这种操作。
免责声明,我不是系统人员或 Linux 人员,因此大部分内容都是我通过研究和反复试验才弄清楚的。
任何帮助是极大的赞赏!
答案1
解决了
首先,sudo crontab -e
虽然使用登录用户的 crontab -e 也可以实现这一点,但我不知道是否存在权限问题。
其次,需要修改 cron 条目以包含前导“sh”,如下所示:
0 8 * * 1-5 sh /config/scripts/set-blocking-hosts.sh
0 19 * * 1-5 sh /config/scripts/set-default-hosts.sh
最后,这可能只是我个人的问题——我已将路由器的时区从 UTC 改为 PST,但并未重启。虽然date
会将本地时间显示为 PST,但我认为cron
它仍基于 UTC 运行——如果我重启了路由器cron
,也许就不需要重启路由器了。