Ubuntu 22.04
我创建了一个 Debian 包,它必须在用户重新启动机器后执行一些安装后的工作。
我有一个执行重启后工作的脚本,让它在下次重启后运行一次的正确方法是什么?
我目前的想法是将其注册为运行一次的 systemd 服务,并让它在运行后接触一些虚拟文件,然后如果虚拟文件存在(例如在随后的重启后)就不执行任何操作。
但我想知道是否已经有其他内置方法可以在下次重启后仅运行一次程序。
Ubuntu 22.04
我创建了一个 Debian 包,它必须在用户重新启动机器后执行一些安装后的工作。
我有一个执行重启后工作的脚本,让它在下次重启后运行一次的正确方法是什么?
我目前的想法是将其注册为运行一次的 systemd 服务,并让它在运行后接触一些虚拟文件,然后如果虚拟文件存在(例如在随后的重启后)就不执行任何操作。
但我想知道是否已经有其他内置方法可以在下次重启后仅运行一次程序。
作为用户,我更希望你这样做,而不是使用一些神奇的自动删除脚本之类的东西,因为事后很难追踪。我认为这种方法有几个好处:
systemd 内置了对多种情况的支持,例如:
还有其他的
ConditionPathExistsGlob
,例如ConditionDirectoryNotEmpty
,,,ConditionFileNotEmpty
等等。如果您希望将脚本更改为在每次启动时运行,则只需删除该条件。
假设此服务和条件已记录在案,则用户可以在需要时通过确保条件不满足轻松地重新运行脚本。
检查配置脚本的状态更加容易。
用户可以更轻松地阻止脚本运行(通过在安装前屏蔽服务),以便他们可以在他们选择的重新启动时运行脚本(通过在他们想要时取消屏蔽)。
Crontab 专门用于在设定的时间运行命令、脚本或应用程序。使用 crontab 不需要提升权限,除非修改了系统文件和/或设置。
Cron 还方便地附带内置选项“@reboot”:
作为安装脚本的一部分,可以使用以下结构来添加 crontab 条目:
使用 -l(列表)选项检查条目是否正确:
以类似的方式,要删除 crontab 条目,可以使用 sed 删除所需的条目:
然后在脚本中添加一个部分,以便在完成所有需要做的事情后删除 crontab 条目。
Cron 并非某个在后台执行神奇操作的“晦涩”程序。它只是一个用户级任务调度程序。此外,最佳实践是使用脚本记录其执行的操作(以及何时执行)。因此,将 cron 与编写良好的脚本结合使用,绝不会给用户带来任何疑惑。在服务器领域,cron 的使用非常广泛。