Rubyスクリプトがすでに実行されているかどうかを簡単に確認してから適切に処理する方法はありますか?たとえば、私はreally_long_script.rbというスクリプトを持っています。私はそれを5分ごとに実行するように頼んだ。実行されると、前の実行がまだ実行されているかどうかを確認してから、2番目のスクリプトの実行を停止します。何か案は? bashでrubyスクリプトが既に実行されているかどうかを確認
5
A
答えて
9
PSはそれと競合状態におそらくオープンを行うための本当に貧しいの方法があります。
従来のUnix/Linuxの方法では、PIDをファイル(通常は/ var/run)に書き込み、起動時にそのファイルが存在するかどうかを確認することです。
pidfileは/var/run/myscript.pidにあり、プログラムを実行する前にそのファイルが存在するかどうかを確認します。 O_EXCL(排他ロック)を使用してファイルとシンボリックリンクを開くことを含む競合状態を回避するためのいくつかのトリックがあります。
ただし、ファイルシステムでアトミック操作を使用することで競合状態を回避するようにコードを作成してください。ホイールを再発明し保存するには
は、スクリプト自体をクリーンアップせずに死亡した場合、それが実行されるようにあなたは、おそらくまた、プロセスが実際に実行されていることを確認する必要がありhttp://rubyforge.org/projects/pidify/
0
:
if ps aux | grep really_long_script.rb | grep -vq grep
then
echo Script already running
else
ruby really_long_script.rb
fi
0
で見たいと思うかもしれません次回は単に /var/run/foo.pidが存在することを確認して終了します。
0
Highlander
説明
あなたのメインスクリプトのインスタンスが1つだけ実行されている保証します宝石。要するに、1つしか存在できません。あらすじ一方、バック、コマンドライン上の
require 'highlander' # This should be the -first- thing in your code.
# Your code here
...
# First attempt, works. Assume it's running in the background.
ruby your_script.rb
# Second attempt while the first instance is still running, fails.
ruby your_script.rb # => RuntimeError
ノート
は、単にハイランダーの宝石は、股関節を保証必要
インストール
gem install highlander
そのスクリプトの1つのインスタンス だけをもう一度起動することはできません。もう一度起動しようとすると、 はRuntimeErrorを発生させます。
関連する問題
- 1. 特定のマシンでスクリプトが既に実行されているかどうかを確認しますか?
- 2. アプリケーションが既に実行されているかどうか確認してください
- 3. rubyスクリプトがウィンドウで実行されているかどうかを調べる
- 4. フルスクリーンアプリケーションが実行されているかどうかを確認するには?
- 5. スクリーンセーバーが実行されているかどうかを確認するには?
- 6. スクリプトが5分ごとに実行されているかどうかを確認するには、
- 7. スクリプトがtty上で実行されているかどうかを確認するには?
- 8. PHPスクリプトがすでに実行されているかどうかを確認する方法
- 9. スクリプトが実行されている場所を確認
- 10. Grand Central Dispatchを使用して、ブロックが既に実行されているかどうかを確認するにはどうすればよいですか?
- 11. アプリケーションがフォアグラウンドで実行されているかどうかの確認
- 12. スクリプトがdofile()でインクルードされているかどうか、またはLuaで直接実行されているかどうかを確認する方法は?
- 13. Pythonがインストールされているかどうかを確認するPowershellスクリプト
- 14. スクリプトがスーパーユーザーとして実行されているかどうかを確認するにはどうすればよいですか?
- 15. プロセスがパイプとして実行されているかどうかを確認してください。
- 16. PerlスクリプトがWindows上で実行されているかどうかを確認するにはどうすればよいですか?
- 17. 環境変数が既に設定されているかどうかを確認してください。
- 18. コンテンツが既にPHPで送信されているかどうかを確認してください
- 19. Rubyプログラムが実行されたかどうかを確認する必要があります
- 20. cronjobsが実行されているかどうかを確認してください
- 21. Java - 別のJavaアプリケーションが実行されているかどうかを確認してください。
- 22. Android:経由でサービスが実行されているかどうかを確認してください。 bindService
- 23. ユーザーがdbで確認されているかどうかを確認
- 24. サービスコントロールマネージャーによってプロセスが実行されているかどうかを確認する方法
- 25. Windows OSがセーフモードで実行されているかどうか確認してください
- 26. Rubyでブロックを実行していないブロックがあるかどうかを確認します
- 27. flock()を使用してファイルが既にロックされているかどうかを確認しますか?
- 28. 実行時にTDBCheckBoxが設定されているかどうかを確認するには
- 29. JavaScript setTimeoutが実行されたかどうかを確認する
- 30. カーネルがCUDAで実行されたかどうかを確認する方法