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


30

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

詳細:

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

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

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

回答:


32

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を使用して)システムでスクリプトを開始します。次のコマンドを(rootとして)実行するだけです:

    update-rc.d myscript defaults 

PS:Upstartが素晴らしくて素晴らしかったことは知っていますが、古いSysV initシステムを優先しています。


1
しかし、システムはどのパラメーターを使用するかをどのように知るのでしょうか?「開始」に設定する方法。ここで試してみましたが、うまくいきませんでした。
ジョンジョンピクラー

1
これは機能しますが、コマンド「service myapp start」はコマンドを終了しません。
トビア

さて、myscriptでstart | stop | restartオプションを使用する方法は?
Codevalley

また、3つの手順を実行した後でも、起動時にjarが実行されません。許可、パス、またはそのようなものを変更する必要があるかどうかは確かですか?
Codevalley

@Codevalley、私が言ったように、このメソッドはSysV init用です。サービスまたは他のコマンドを使用するには、アップスタートジョブを作成する必要があります。ただし、これを行う場合は、システム化されたものを作成する必要があります(標準になっているため)
Marcos Roriz Junior 15/10/30

6

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

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

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


Upstart Webサイトから、2019年現在:「プロジェクトはメンテナンスモードのみです。新しい機能は開発されておらず、一般的なアドバイスは別の最小initシステムまたはsystemdに移行することです」
Nav

2

3つの簡単な提案...

  1. 作成Sの中でタルトスクリプトを/etc/rc3.d対応する(マルチユーザコンソールモード)Kで病気のスクリプトを/etc/rc.0して/etc/rc6.d(runevel 0)または、再起動(ランレベル6)を参照してくださいダウンしたときにシステムが力制御された方法でJavaプログラムを殺すためにランレベルにアン紹介

    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前者は書き込み可能ではない場合。


また、ログアウトすると、バックグラウンドで実行されますか?
ランジルバー

0

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

  update-rc.d myscript defaults 

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

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



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.