再起動時にコマンドを実行するためにCronJobを作成する方法は?

再起動時にコマンドを実行するためにCronJobを作成する方法は?

私のホストを介してSSHにアクセスし、コントロールパネルを使用することができます。 SSH経由で軽量サーバーにRailsをインストールしました。失敗した場合は、サーバーを再起動したいと思います。異なるバージョンのRubyで実行されている2つのサーバーを起動したいので、手動で起動する必要があるようです。

コントロールパネルの「Cronjob」領域を使用してこれを行うことができるか、そうであればどのコマンドが必要かを知りたいです。

SSHを介して次のようにサーバーを起動します。

cd [app1path] 
bundle exec thin -C /etc/thin/app2.yml start

cd [app2path]
bundle exec thin -C /etc/thin/app2.yml start

これらのステップは互いに競合しているように見えるので、順番に実行することが重要です(サービスとして実行し、init.d1つだけを起動し、奇妙なことに、2つのsleep 60ステップのいずれかに追加しても違いはありませんが)。

コントロールパネルに次のコードを配置しても何も起こらないようです。

@reboot [app1path; bundle exec thin -C /etc/thin/app1.yml start; cd [app2path]; bundle exec thin -C /etc/thin/app2.yml start

何が効果がありますか?いくつかのヒントや指示を教えてくれてありがとう。

答え1

エントリは@reboot起動時に開始されますが、アプリケーションの実行に必要なすべてのエントリが実行中であるというcronわけではありません。bundleたとえば、設定によっては、その時点でネットワークが機能しない場合があります。

あなたの状況に応じて、次のことを行います。

  1. 再起動操作が既知の場所に一意のファイルを書き込むようにします。
  2. たとえば、X分ごとに定期的に実行される一般的なcronjobがあります。これにより、一意のファイルが存在し、最小Y分持続していることが確認されます。

ファイルが存在し、十分に古い場合、ファイルが削除され、バンドルを開始するコマンドが実行されます。確認すると、再起動後約Y〜X + Y分の間にコマンドが一度だけ開始されることを確認できます。値を下げることができます。)

もう1つのアプローチは、init.dタスクを直接作成し、適切なリンクを挿入して必要なすべてのサービスを開始することです。 (これを行う方法systemdは、Debianシステムが使用するシステムの種類によって異なります。sysvinit

関連情報