我花了很多时间寻找在重启时运行命令的好方法。大多数解决方案建议使用带有“@reboot”时间规范的 crontab。
我最终得到了下面的代码,但是,它有一个明显的问题,我希望能有一个很好的修复:
每次系统重启时,cron 任务都会运行,但这并不是我们想要的。最不靠谱的解决方法是让脚本本身删除此脚本中包含的 crontab 行,但这会造成非常不干净的依赖关系。
reboot_and_launch_setup() {
# Get the command on reboot ready with cron
if [[ -f "${DEP_SCRIPT}" ]]; then
POST_REBOOT_CM="@reboot ${DEP_SCRIPT}"
(crontab -u $(whoami) -l; echo "${POST_REBOOT_CM}" ) | crontab -u $(whoami) -
else
echo "ERROR: The deployment script did not get installed."
echo "ERROR: Expected to find deployment script, ${DEP_SCRIPT}"
echo "ERROR: Check that the deployment script is included in the archive:"
echo "ERROR: --> ${PSA_DEPS_FILE}"
fi
reboot
}
at
理想的解决方案是提供一个带有时间规范的命令,@reboot
以便正在运行的命令仅在下次重新启动时运行一次。这几乎就像我们需要对命令进行增强at
以接受 cron 接受的相同快捷方式列表。
无论如何,我离题了...有没有办法做到这一点,第二个脚本不必首先将其自身从 crontab 中删除?
答案1
我想我会将其设置为适当的服务(systemd 或其他),在它成功完成“部署操作”后,它会再次自行删除。