我想让 systemd 在系统完全启动并准备就绪后运行一个程序。最终,该过程可能会完成并退出,希望结果为 0;在某些情况下,可能需要有一个包装脚本来关闭计算机(当它存在时),尽管绝对不应该重新启动它。我使用 Chef 管理这些系统,到目前为止我的单元文件如下所示:
systemd_unit 'siege.service' do
content ({
Unit: {
Description: 'Run Siege',
Requires: 'network-online.target',
After: 'network-online.target',
Documentation: ['https://github.com/joedog/siege'],
AssertPathExists: node['siege']['log_dir'],
},
Service: {
Type: 'idle',
ExecStart: '/usr/local/bin/siege',
User: node['current_user'],
}})
action [:create]
only_if { node['siege']['create_service'] }
end
systemd_unit 'siege.timer' do
content({Unit: {
Description: 'Siege timer',
Documentation: ['https://github.com/joedog/siege'],
After: 'network-online.target',
},
Timer: {
OnStartupSec: '10s',
AccuracySec: '1us',
},
Install: {
WantedBy: 'multi-user.target',
}})
action [:create, :enable]
only_if { node['siege']['create_service'] }
end
所以基本上我不知道我是否朝着正确的方向前进,也不知道计时器是否是执行此操作的最佳方法。从我读到的内容来看,听起来它会在 systemd 启动 10 秒后启动——这不正是我想要的;我希望它在 Everything Else TM之后立即启动。我见过很多建议使用服务的类似问题,但对我来说,这本身并不是真正的服务 - 这是一次运行一个程序,该程序旨在退出,正如您所期望的那样去做。如果其他一切都启动的话,那真是太好了,这样《围攻》就可以占用所有网络带宽或 CPU,而且我对我的任意性并不感到兴奋,10s
但我没有看到更好的方法。我这样做是不是疯了?