我尝试运行一个我命名的脚本script1.sh
:
out="/home/me/scripts/out.txt"
sudo ntpdate 99.99.99.99 >> $out
在带有 crontab 的计时器上森托斯7操作系统。这样做的目的是自动将 Centos 7 时间与时间服务器同步。
使用命令
crontab –e # (1)
sudo crontab –e # (2)
sudo vi /etc/crontab # (3),
我在每个配置文件 (1)、(2) 和 (3) 中粘贴了时间表定义的字符串。该字符串是
* */1 * * * me /home/me/scripts/script1.sh
然后我应用该sudo systemctl reload crond.service
命令来实施新配置。
根据上述时间表,script1.sh
必须每隔一小时执行一次。然而,问题是 ntpdate 需要sudo
权限,因此它script1.sh
会做同样的事情。谷歌搜索这个问题,我发现可以通过使用开始编辑命令sudo
编辑配置文件来取消密码要求。然后我在其底部添加了一些无密码访问的权限:sudoer
sudo visudo
me ALL=(ALL) NOPASSWD: /home/me/scripts/*
me ALL=(ALL) NOPASSWD: /usr/sbin/ntpdate
起初,当它在所有三个 (1)、(2) 和 (3) 中定义时,它就可以工作。然后,由于我在 (2) 和 (3) 中评论了计划定义,并重新加载了 crontab - 它会停止工作并开始询问 sudo 密码。然后我原样退回去,但没有看到任何效果。
问题
你能提示一下该怎么做吗?可以做些什么来让它发挥作用?
答案1
您应该使用系统 crontab,而不是尝试通过用户的 crontab 触发需要 root 的操作,然后您就不会需要 sudo
,因为事情是已经以 root 身份运行。
但在这个具体案例中,从技术上来说,你确实做错了事情。ntpdate
不应该这样使用;这只是时间突然跳跃和时钟不断漂移的保证。
因此,废弃该脚本并安装chrony
,并适当地配置 /etc/chrony.conf
,并启用它:sudo systemctl enable --now chronyd
。 Chrony 正是您希望以最小错误保持时钟与 NTP 服务器同步的守护进程。