我目前正在编写 bash 脚本,它将向 root 的 crontab 添加作业。我试图用命令来实现它:
sudo crontab -e -u root | { cat; echo "@reboot /home/$CURRENT_USER/scripts/reboot.sh"; } | crontab -
我正在 Ubuntu Server 18.04 的 shell 中测试此命令,在输入 sudo 密码后,shell 完全挂起。我已经测试过好几次了。服务器资源正常,建立新的 ssh 连接后一切正常。
请帮助我理解这个命令有什么问题,我应该做什么才能让它向 root crontab 写入一些内容(sudo su 不起作用,因为创建了新的 shell,这会停止脚本)。
答案1
crontab -e
调用编辑器。编辑器的输出将发送到cat
命令,但(最多)它正在等待您编辑文件。
你可能应该做这样的事情
job="@reboot /home/$CURRENT_USER/scripts/reboot.sh"
tab="$(crontab -l)"
{ echo "$tab" | grep -vxF -e "$job"; echo "$job"; } | crontab
如果该代码段尚未以 root 身份运行,请将动词的两个实例更改crontab
为sudo crontab -u root
答案2
您不必使用 crontab 向 cron 添加条目。
也许是这样的:
echo "59 23 * * * /home/$CURRENT_USER/scripts/reboot.sh" | sudo tee -a /var/spool/cron/root
cron 将自动获取更改。
用户 crontab 文件只是一个标准文本文件。根据需要对其进行操作,cron 将接收更改。