systemd:起動時に終了する必要がある単一のコマンドを実行する方法

systemd:起動時に終了する必要がある単一のコマンドを実行する方法

システムが完全に起動して準備された後、systemdはプログラムを実行したいと思います。その結果、プロセスは完了して終了することができ、結果はゼロになります。場合によっては、コンピュータを再起動してはいけませんが、コンピュータをシャットダウンするラッパースクリプトが必要になる場合があります。私は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より良い方法はありません。私はこのようなことをして狂ったのですか?

ベストアンサー1

おすすめ記事