如何使 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 初始化系統。

答案2

是的!有可能的。 :)暴發戶是確保服務保持運作的方法。它有五個軟體包,全部預設安裝:

  • Upstart init 守護程式和 initctl 實用程序
  • upstart-logd 為 logd 服務提供 logd 守護程式和作業定義文件
  • upstart-compat-sysv 為 rc 任務和重新引導、運行等級、關閉和 telinit 工具提供作業定義文件,這些工具提供與 SysVinit 的兼容性
  • startup-tasks 為系統啟動任務提供作業定義文件
  • system-services 為 tty 服務提供作業定義文件

學習是非常愉快的,也是非常值得的。新貴有網站:http://upstart.ubuntu.com/

答案3

3個快速建議...

  1. 創建一個S/etc/rc3.d(多用戶控制台模式)中的 tar 腳本以及相應的Kill 腳本在系統關閉(runevel 0)或重新啟動(runlevel 6)時以受控方式終止您的 Java 程式請/etc/rc.0參閱/etc/rc6.d運行等級簡介

    您也許能夠在運行等級 2 (rc2.d) 中啟動 Java 應用程序,但是作為爬網程序,它將需要 TCP/IP。因此,請事先確保您的網路服務在運作等級 2 中可用/已啟動。網路在運作等級 3 中肯定是上升的。

    /etc/init.d包含所有實際的啟動/終止腳本。/etc/rcN.d目錄只包含指向它們的鏈接,前綴為 S 或 K,以根據運行級別 N 分別啟動或終止它們。

  2. 運行的進程crond應該在註銷之間持續存在。也許將其添加到您的 crontab 中。

  3. 運行的進程nohup也應該持續存在。看nohup:即使在登出後也執行指令

    $ nohup java -jar myapp.jar &
    

    預設情況下,myapp.jar的標準輸出將轉到名為 的文件./nohup.out,或者$HOME/nohup.out如果前者不可寫。

答案4

帶有 Linux Java 版本檢查的簡單啟動腳本授權代理 和窗戶驗證代理.bat

相關內容