質問: supervisor を使って python のプログラムをデーモン化して複数起動したのですが 各デーモン起動時に conda env をなければ作成あれば流用というコードになっていて 時々中途半端な状態で venv が作成されてしまうことがあって起動に失敗するため 起動前に venv を削除したいです ただ作成する venv 名はサービスの内部で計算されるためコマンド時点ではわからず サービスごとに自分の前回作った venv を削除するということが難しいため 特定のプレフィックスのついた venv を全削除したいと思ってるのですが rm /venvpath/prefix-* を各サービスで読んでしまうと タイミングによって先に起動してすでに venv を新しく作成中の物まで消してしまうかもしれません supervisor には起動順を指定できる priority というパラメータがあるみたいで priority を各サービスより小さくした rm コマンドを読んだ場合 先に削除が完了されることって保証されるんでしょうか? なんとなく supervisor がやってることって子プロセスを作って親が exit するだけで 親が exit した時点で子プロセスで実行される rm コマンド実行タイミングは保証されない感じがするんですが、親プロセス自体でコマンドを実行する(非デーモンプロセスの起動)みたいなことってできないでしょうか? また supervisor や priority に限らず このような要件で他にうまい方法があったら教えていただきたいです
回答: 後に起動したいプロセスを全部自動起動を false にして べつに自動起動 true にしたサービスから 削除 → ほかのプロセスを順番に起動 というスクリプトを実行するのはどうでしょうか ``` #!/bin/bash rm /venvpath/prefix-* sudo supervisorctl start program1 sudo supervisorctl start program2 sudo supervisorctl start program3 : sudo supervisorctl remove 自分自身 ``` を実行するサービスだけを自動起動するようにしておけば ほかのプロセス起動前に必ず rm 実行できるんじゃないかと思います