web-dev-qa-db-ja.com

起動時とログアウト時にjarファイルを実行する方法は?

どこから探し始めればいいのかわかりません。私はデーモンについて読んでいましたが、概念を理解していませんでした。

詳細:

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

何か案は?誰かが私を正しい方向に向けることができますか?

最も単純なソリューションを探しています。

28
RanZilber

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システムを優先しています。

31

はい!可能です。 :)Upstartは、サービスが実行されていることを確認する方法です。 5つのパッケージがあり、すべてデフォルトでインストールされます。

  • Upstart initデーモンとinitctlユーティリティ
  • upstart-logdはlogdデーモンとlogdサービスのジョブ定義ファイルを提供します
  • upstart-compat-sysvは、rcタスクと、SysVinitとの互換性を提供する再起動、ランレベル、シャットダウン、およびtelinitツールのジョブ定義ファイルを提供します
  • startup-tasksは、システム起動タスクのジョブ定義ファイルを提供します
  • system-servicesは、ttyサービスのジョブ定義ファイルを提供します

学習はとても楽しく、それだけの価値があります。 UpstartにはWebサイトがあります: http://upstart.ubuntu.com/

6
user8290

3つの簡単な提案...

  1. Startスクリプトを/etc/rc3.d(マルチユーザーコンソールモード)で作成し、対応するKillスクリプトを/etc/rc.0および/etc/rc6.dは、システムのパワーダウン(runevel 0)またはリブート(runlevel 6)時にJavaプログラムを制御された方法で強制終了します。 Runlevelsの概要 を参照=。

    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という名前になります。

2
tarmarc

最も簡単な方法は、supervisordを使用することです。詳細は http://supervisord.org/ をご覧ください

ここで詳細を表示することもできます。

システムの起動時に実行可能なjarファイルを実行する

https://www.digitalocean.com/community/tutorials/how-to-install-and-manage-supervisor-on-ubuntu-and-debian-vps

0
Alan Thompson

Linux auth-agent およびWindows auth-agent.bat のJavaバージョンチェックを使用した単純な起動スクリプト

0
Yuriy Tumakha

また、以下を使用してアプリケーションを作成する場合にも注意してください。

  update-rc.d myscript defaults 

許可0755を持ち、.shパスを使用または取得するには。スクリプトが/root/test.shにあるとしましょう。/root/にアクセスする前に、最初にCD test.shに変更する必要があります。

最適な方法は、init.dでSHを作成し、shへのパスを変更して、開始関数で実行することです。

0
Şήøωў