systemd:如何运行应在启动时退出的单个命令

systemd:如何运行应在启动时退出的单个命令

我想让 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但我没有看到更好的方法。我这样做是不是疯了?

相关内容