我不知道從哪裡開始尋找。我一直在閱讀有關守護進程的內容,但不理解這個概念。
更多細節 :
- 我一直在編寫一個永不停止的爬蟲程序,並透過網路上的 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 初始化系統。
答案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個快速建議...
創建一個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 分別啟動或終止它們。運行的進程
crond
應該在註銷之間持續存在。也許將其添加到您的 crontab 中。運行的進程
nohup
也應該持續存在。看nohup:即使在登出後也執行指令。$ nohup java -jar myapp.jar &
預設情況下,
myapp.jar
的標準輸出將轉到名為 的文件./nohup.out
,或者$HOME/nohup.out
如果前者不可寫。