62113


supervisor を使って python のプログラムをデーモン化して複数起動したのですが  
各デーモン起動時に conda env をなければ作成あれば流用というコードになっていて  
時々中途半端な状態で venv が作成されてしまうことがあって起動に失敗するため  
起動前に venv を削除したいです

ただ作成する venv 名はサービスの内部で計算されるためコマンド時点ではわからず  
サービスごとに自分の前回作った venv を削除するということが難しいため  
特定のプレフィックスのついた venv を全削除したいと思ってるのですが

rm /venvpath/prefix-* を各サービスで読んでしまうと  
タイミングによって先に起動してすでに venv を新しく作成中の物まで消してしまうかもしれません

supervisor には起動順を指定できる priority というパラメータがあるみたいで  
priority を各サービスより小さくした rm コマンドを読んだ場合  
先に削除が完了されることって保証されるんでしょうか？

なんとなく supervisor がやってることって子プロセスを作って親が exit するだけで  
親が exit した時点で子プロセスで実行される rm
コマンド実行タイミングは保証されない感じがするんですが、親プロセス自体でコマンドを実行する（非デーモンプロセスの起動）みたいなことってできないでしょうか？

また supervisor や priority に限らず  
このような要件で他にうまい方法があったら教えていただきたいです


CC BY-SA 4.0
2020-01-08T12:11:00.480
62073
2021-07-14T03:16:35.817
2021-07-14T03:16:35.817
3060
question
linux supervisor
supervisor で複数のサービス起動前にコマンドを実行したい


後に起動したいプロセスを全部自動起動を false にして  
べつに自動起動 true にしたサービスから

削除 → ほかのプロセスを順番に起動

というスクリプトを実行するのはどうでしょうか

[code]

    #!/bin/bash
    
    rm /venvpath/prefix-* 
    sudo supervisorctl start program1
    sudo supervisorctl start program2
    sudo supervisorctl start program3
      :
    sudo supervisorctl remove 自分自身
    
[/code]

を実行するサービスだけを自動起動するようにしておけば  
ほかのプロセス起動前に必ず rm 実行できるんじゃないかと思います


CC BY-SA 4.0
2020-01-09T15:33:38.327
62113
2020-01-09T15:33:38.327
62073
answer