&を使用してデーモンモードで実行可能ファイルを実行するシェルコマンドを実行するタスクをansibleで作成しようとしています。次のようなもの
-name: Start daemon
Shell: myexeprogram arg1 arg2 &
私が見ているのは、私が保持し、タスクがすぐに戻り、プロセスが開始されていない場合です。削除してアンシブルタスクを返すと、かなりの時間待機します。
Ansibleを介してデーモンモードでプログラムを起動する適切な方法についての提案に感謝します。 Plsは、これをサービスとして実行するのではなく、特定の条件に基づいたアドホックなバックグラウンドプロセスとして実行することに注意してください。
(またはAnsible)をログアウトしても、バックグラウンドで実行されている場合でも、実行中のプロセスに終了信号が送信されます。
Nohup
を使用してこれを回避できます。
- name: Start daemon
Shell: Nohup myexeprogram arg1 arg2 &
達成したいことの簡単な説明から、実行可能ファイルをサービスとして設定し(Upstartまたは同様のものを使用)、それを必要とする他の条件に基づいて必要に応じて開始/停止するのが最適だと思われます実行されている(または実行されていない)。
そうしないと、これをプロセスとして実行しようとすると、PIDなどをキャプチャする必要があるため、必要なときに起動したデーモンをシャットダウンすることができます。initconfigファイルをインストールするのと同じくらい複雑ですまた、Upstartなどのシステムが開始/停止などの制御を提供するという利点はありません。
特に出力をログに記録したかったため、最善の方法を見つけたのは、「デーモン化」パッケージを使用することでした。以下のようなCentOS/Redhatを使用している場合。おそらく、そのためのaptパッケージもあります。
- name: yum install daemonize
yum:
name: daemonize
state: latest
- name: run in background, log errors and standout to file
Shell: daemonize -e /var/log/myprocess.log -o /var/log/myprocess.log /opt/myscripts/myprocess.sh
上記のdaemonizeの提案に追加します。特定のディレクトリでプログラムを開始する場合は、次のようにします。
- name: install daemonize package
package:
name: daemonize
state: latest
- name: start program
command: daemonize -c /folder/to/run/in /path/to/myexeprogram arg1 arg2
特に、-e -oフラグを使用して出力をログに記録することもできます。