どこから調べ始めたらよいかわかりません。デーモンについて読んでいますが、その概念が理解できませんでした。
詳細:
- 私は、インターネット上の RSS を介して停止することなくクローラーをクロールするプログラムを書いてきました。
- クローラーは Java で書かれているので、現在は jar です。
- 私は Ubuntu 11.04 がインストールされているマシンの管理者です。
- マシンがクラッシュする可能性もあるので、マシンを起動するたびにクローラーを実行するようにしたいと思います。
- さらに、ログアウトしても実行を継続したいです。これが可能かどうかはわかりませんが、ほとんどの場合、ログアウトしていても、クロールし続けたいのです。
何かアイデアはありますか? 誰か私に正しい方向を示してもらえますか?
最も簡単な解決策を探しているだけです。
答え1
SysVInit を使用してこれを行う簡単な方法は次のとおりです。手順:
アプリケーションの開始スクリプトと停止スクリプトを作成します。これを任意のディレクトリに配置します。この例では次のようになります。
- 開始スクリプト:
/usr/local/bin/myapp-start.sh
- 停止スクリプト:
/usr/local/bin/myapp-stop.sh
それぞれに、アプリを実行/停止するための手順が提供されます。たとえば、
myapp-start.sh
コンテンツは次のように単純なものになります。#!/bin/bash java -jar myapp.jar
停止スクリプトの場合は次のようになります。
#!/bin/bash # Grabs and kill a process from the pidlist that has the word myapp pid=`ps aux | grep myapp | awk '{print $2}'` kill -9 $pid
- 開始スクリプト:
以下のスクリプト (
myscript
) を作成し、 に配置します/etc/init.d
。/etc/init.d/myscript
コンテンツ:#!/bin/bash # MyApp # # description: bla bla case $1 in start) /bin/bash /usr/local/bin/myapp-start.sh ;; stop) /bin/bash /usr/local/bin/myapp-stop.sh ;; restart) /bin/bash /usr/local/bin/myapp-stop.sh /bin/bash /usr/local/bin/myapp-start.sh ;; esac exit 0
スクリプトをシステムで起動するようにします(SysVを使用)。次のコマンドを実行します(ルートとして):
update-rc.d myscript defaults
PS: Upstart が素晴らしいことは知っていますが、私は古い SysV init システムを好みます。
答え2
はい!可能です。:)アップスタートサービスが確実に実行され続けるようにするには、これが最善の方法です。5 つのパッケージがあり、すべてデフォルトでインストールされています。
- Upstart initデーモンとinitctlユーティリティ
- upstart-logdはlogdデーモンとlogdサービス用のジョブ定義ファイルを提供します。
- upstart-compat-sysv は、SysVinit との互換性を提供する rc タスクと、reboot、runlevel、shutdown、telinit ツールのジョブ定義ファイルを提供します。
- startup-tasks は、システム起動タスクのジョブ定義ファイルを提供します。
- system-services は tty サービスのジョブ定義ファイルを提供します
学習はとても楽しく、価値があります。Upstart には Web サイトがあります。http://upstart.ubuntu.com/
答え3
3 つの簡単な提案...
作成するス
/etc/rc3.d
対応する(マルチユーザーコンソールモード)のtartスクリプトけシステムのパワーダウン(runevel 0)または再起動(runlevel 6)時に、制御された方法でJavaプログラムを強制終了する/etc/rc.0
スクリプトを組み込みます。/etc/rc6.d
ランレベルの紹介。Java アプリをランレベル 2 (rc2.d) で起動できるかもしれませんが、クローラーとしては TCP/IP が必要になります。そのため、ランレベル 2 でネットワーク サービスが使用可能/起動されていることを事前に確認してください。ランレベル 3 ではネットワークは確実に起動します。
/etc/init.d
実際の開始/終了スクリプトがすべて含まれています。/etc/rcN.d
ディレクトリには、ランレベル N ごとに、開始または終了を示す S または K のプレフィックスが付いた、それらへのリンクのみが含まれています。によって実行されるプロセスは、
crond
ログアウト間でも存続する必要があります。crontab に追加してください。で実行されるプロセス
nohup
も持続する必要があります。nohup: ログアウト後もコマンドを実行する。$ nohup java -jar myapp.jar &
デフォルトでは、
myapp.jar
の標準出力は という名前のファイルに送信されます./nohup.out
。$HOME/nohup.out
前者が書き込み可能でない場合は に送信されます。
答え4
Linux 用の Java バージョンチェック機能を備えたシンプルな起動スクリプト認証エージェント およびWindows認証エージェント.bat