linux自啓動、定時啓動腳本

linux開機自啓動

想讓一個程序、腳本開機自啓動,可以在/etc/rc.d目錄下面找到rc.local文件,編輯該文件,在尾部加上需要運行的命令即可。

如:

#cd /etc/rc.d
#sudo vim rc.local

我需要讓服務器在開機時運行一個php程序(ZMQServer.php),就加上這樣一句話。

#前面是php的絕對路徑,後面的部分是需要運行的程序的絕對路徑
/usr/local/bin/php /web/app/ZMQServer.php

這樣就ok了。

 

linux定時啓動腳本

以上運行的php腳本會因爲程序上的不可預知的錯誤而報錯停止,這樣客戶端就無法連接到服務器了,因此需要一個定時檢測該程序是否存在進程中,如果不存在就要重啓的腳本,並且讓它定時啓動進行檢測。

1.第一步,需要看看進程裏是否有這個程序運行,使用如下的命令

#ps aux | grep ZMQServer.php | grep -v grep

第一部分是顯示出所有的進程信息。

第二部分是將前面的結果拿來正則ZMQServer.php,結果是必然有一條grep進程,如果有ZMQServer.php運行了,則有ZMQServer.php。

第三部分是將grep進程自身給屏蔽掉。最後的結果就是如果後臺運行了ZMQServer.php則有結果,否則是空的結果。

 

2.不可能人工手動的使用這條命令檢查是否進程在運行,所以將它寫成一個腳本(/bin/isRun)封裝起來。

#!/bin/sh
ret=`ps aux|grep ZMQServer.php|grep -v grep`
if [ -n "$ret" ]
then
echo "is running!";
echo &date "+%x %X----->ZMQServer.php is running"
else
/usr/local/bin/php /web/app/ZMQServer.php&
echo &date "+%x %X----->ZMQServer.php have restarted"
fi

這條腳本的作用顯而易見,就是判斷ZMQServer.php是否運行,如果運行了就將當前的時間與信息輸出,如果沒有運行就重啓ZMQServer.php並輸出信息。

 

3.做到這一步,已經算是半自動化了,爲了能實現完全自動化,就得將上面的腳本放入自動運行的程序中。

定時執行的程序叫cron,先要檢查下它是否在進程中運行了。

#ps aux | grep cron

如果沒有運行可以通過下面的命令讓它啓動起來。

#cron停止
/etc/rc.d/init.d/crond stop
#cron啓動
/etc/rc.d/init.d/crond start

/etc下有一個crontab文件,該文件記錄了一些定時啓動的內容。

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
*/1 * * * * root /bin/isRun >> /web/log/zmqlog.txt 2>&1

前面的5個*分別代表着

分鐘 (0-59)
小時 (0-23)
日期 (1-31)
月份 (1-12)
星期 (0-6)//0代表星期天
 
*表示任意的意思。
*/5 * * * * 表示每天每5分鐘執行一次
* */2 * * * 表示每天每兩小時執行一次
* 2 * * * 表示每天的02:00執行一次
 
上面的run-parts指的是運行目錄裏的內容,後面的cron.dailycron.weekly等都是文件夾,裏面放了一些腳本文件,我爲了圖方便,就直接寫在這個文件上了,我想讓檢測腳本(/bin/isRun)每分鐘執行一次(實際上* * * * *和*/1 * * * *)是一樣的效果,就加上最後面的那條就行了。
 
需要注意的一點就是,所有的東西都寫成絕對路徑,這樣是最妥當的。
 
這麼一來,服務器每分鐘都會執行下/bin/isRun來判斷ZMQServer.php有沒有正常的運行,基本上保證了客戶端能夠正常請求了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章