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 직후에 시작되기를 바랍니다 . 서비스 사용을 제안하는 유사한 질문을 많이 보았지만 나에게 그것은 실제로 서비스 자체가 아닙니다. 서비스는 종료되도록 설계된 시간에 프로그램을 실행하여 예상한 작업을 수행하는 것입니다. 다른 모든 것이 준비되어 Siege가 네트워크 대역폭이나 CPU를 모두 차지할 수 있다면 좋을 것입니다. 제 자의성은 별로 마음에 들지 않지만 10s더 나은 방법은 없습니다. 내가 이런 짓을 해서 미쳤나?

관련 정보