起動時とログアウト時に jar ファイルを実行するにはどうすればよいでしょうか?

起動時とログアウト時に jar ファイルを実行するにはどうすればよいでしょうか?

どこから調べ始めたらよいかわかりません。デーモンについて読んでいますが、その概念が理解できませんでした。

詳細:

  • 私は、インターネット上の RSS を介して停止することなくクローラーをクロールするプログラムを書いてきました。
  • クローラーは Java で書かれているので、現在は jar です。
  • 私は Ubuntu 11.04 がインストールされているマシンの管理者です。
  • マシンがクラッシュする可能性もあるので、マシンを起動するたびにクローラーを実行するようにしたいと思います。
  • さらに、ログアウトしても実行を継続したいです。これが可能かどうかはわかりませんが、ほとんどの場合、ログアウトしていても、クロールし続けたいのです。

何かアイデアはありますか? 誰か私に正しい方向を示してもらえますか?

最も簡単な解決策を探しているだけです。

答え1

SysVInit を使用してこれを行う簡単な方法は次のとおりです。手順:

  1. アプリケーションの開始スクリプトと停止スクリプトを作成します。これを任意のディレクトリに配置します。この例では次のようになります。

    • 開始スクリプト:/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
    
  2. 以下のスクリプト ( 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
    
  3. スクリプトをシステムで起動するようにします(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 つの簡単な提案...

  1. 作成する/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 のプレフィックスが付いた、それらへのリンクのみが含まれています。

  2. によって実行されるプロセスは、crondログアウト間でも存続する必要があります。crontab に追加してください。

  3. で実行されるプロセスnohupも持続する必要があります。nohup: ログアウト後もコマンドを実行する

    $ nohup java -jar myapp.jar &
    

    デフォルトでは、myapp.jarの標準出力は という名前のファイルに送信されます./nohup.out$HOME/nohup.out前者が書き込み可能でない場合は に送信されます。

答え4

Linux 用の Java バージョンチェック機能を備えたシンプルな起動スクリプト認証エージェント およびWindows認証エージェント.bat

関連情報