Upstart は、起動時に MySQL の起動後にジョブを自動開始するにはどうすればよいですか?

Upstart は、起動時に MySQL の起動後にジョブを自動開始するにはどうすればよいですか?

私の仕事は MySQL に依存しています。そのため、MySQL の後に仕事が起動できるようにしたいと考えています。

私は読んだ新興料理本start onジョブを自動的に開始できることがわかりました。

start on started mysql

そして、それは動作します。しかし、起動後に mysql がジョブに影響を与えることは望ましくありません。ジョブを停止すると、mysql を再起動することでジョブが再開されます。これを回避するにはどうすればよいですか?

答え1

/tmp/ジョブがすでに実行されたかどうかを追跡するために、フォルダーにロック ファイルを作成します。次に例を示します。

  1. 次の 2 つの Upstart ジョブ構成ファイルを作成します。

    /etc/init/joba.conf

    # job A
    
    start on local-filesystems
    stop on runlevel[016]
    
    script
      /bin/echo job-A started >> /tmp/myjobs.log
      exec sleep 5
    end script
    

    /etc/init/jobb.conf

    # job B triggered after A
    
    start on started joba
    
    script
      /bin/echo job-B started >> /tmp/myjobs.log
      if ! [ -f /tmp/jobb.lock ]
      then
        /bin/echo " do job-B tasks" >> /tmp/myjobs.log
        /bin/touch /tmp/jobb.lock
      else
        /bin/echo " bypass job-B tasks"  >> /tmp/myjobs.log
      fi
      exec sleep 5
    end script
    
  2. リブート

  3. 確認するcat /tmp/myjobs.logか、sudo tail -f /tmp/myjobs.log別のウィンドウで開きます。
  4. ジョブAを再度実行してくださいsudo start joba
  5. チェック/tmp/myjobs.log、バイパスの注記を参照:

    job-A started
    job-B started
     do job-B tasks
    job-B started
     bypass job-B tasks
    job-A started
    job-B started
    job-A started
     bypass job-B tasks
    

注記:実行ごとに 3 行あります。ここでの行のソートは重要ではありません。stdoutバッファリングの問題であり、upstart とは関係ありません。ジョブは正しい順序で実行されます。

関連情報