linux的“自動化”

pythontab發表於2015-12-18

linux系統的web網站在運營狀態時,我們常需要對網站進行維護,例如檢視資源剩餘並做出響應、日誌分割、資料整理,在特定狀態執行特定任務等等,這些都會需要linux能實現自動執行某些任任務。本篇博文介紹如何進行常見的linux自動化任務。


實現“自動化”有如下好處:

節省人力,一個指令碼就夠了。

在夜晚自動執行可以避開網站流量高峰期,不影響網站白天的效率。

準確,設定完善的情況下,不會出差錯。

當然最重要的還是省心了,不用頻繁的敲某些命令了。

開機啟動

開機啟動應該是我們很經常的需求了,我們常需要在開機時就自動執行某些命令來開啟服務,程式等,有了它我們不必再在每次開機時輸入同一堆命令。


chkconfig命令


使用chkconfig命令可以在設定在不同啟動級別下啟動特定的服務或是程式。


先說一下linux的執行級別:


等級0表示:表示關機

等級1表示:單使用者模式

等級2表示:無網路連線的多使用者命令列模式

等級3表示:有網路連線的多使用者命令列模式

等級4表示:不可用

等級5表示:帶圖形介面的多使用者模式

等級6表示:重新啟動

chkconfig的命令如下:


chkconfig --list //命令檢視已設定的開啟自啟動列表。

xxxd 0:off 1:off 2:on ... 6:off //list的結果,表示在xxxd服務在啟動級別為2 3 4 5 的情況下會自動啟動。 

chkconfig --add xxxd//向任務列表中新增一個xxxd服務

chkconfig [--level 1/2/../6] xxxd on/off//設定xxxd用服務在n狀態為開/關,[]內省略則在2345級別開啟

chkconfig --del xxxd //將任務列表中的xxxd服務刪除

rc.d檔案的編輯


也可以直接編輯/etc/rc.d/目錄下的檔案來實現開機自啟動。此目錄下有很多檔案,rcn.d是在啟動狀態為n的情況下的啟動資料夾,rc、rc.sysinit、init.d都是系統的模組或系統設定的自啟檔案[夾]。


我們用vim rc.local 編輯 rc.local檔案,來定製自己的自啟計劃。命令十分簡單,就像平常在操作一樣。如/usr/local/apache/bin/apachectl start表示開機自啟動apache伺服器。


at實現定時任務

at是一個簡單的功能簡單的定時任務程式,它只能進行一次性的定時任務,其用法如下:


#at time      //at加時間啟動at命令

at>operation    //輸入要執行的操作

at>Ctrl+D      //按Ctrl+D退出命令編輯

其time的常見形式如下


at H:m tomorrow     //第二天的H點m分

at now + n minutes/hours/days/weeks  //在n分/時/天/周後

at midnight         //在午夜=-=

at H:m pm/am        //在當天上午/下午的H點m分

我們也可以在/var/spool/at檔案中檢視at的當前命令。還需要注意的是,linux預設atd程式關閉狀態,需要手動開啟。


crontab實現定時任務

linux內建的cron程式能幫我們實現這些需求,cron搭配shell指令碼,非常複雜的指令也沒有問題。


cron介紹


cron守護程式是一個由實用程式和配置檔案組成的小型子系統,在幾乎所有類 UNIX 系統上都可以找到某種風格的cron,我們可以用ps aux|grep cron找到crond這個守護程式。


我們經常使用的是crontab命令是cron table的簡寫,它是cron的配置檔案,也可以叫它作業列表,我們可以在以下資料夾內找到相關配置檔案。


/var/spool/cron/ 目錄下存放的是每個使用者包括root的crontab任務,每個任務以建立者的名字命名

/etc/crontab 這個檔案負責排程各種管理和維護任務。

/etc/cron.d/ 這個目錄用來存放任何要執行的crontab檔案或指令碼。

我們還可以把指令碼放在/etc/con.hourly、/etc/con.daily、/etc/con.weekly、/etc/con.monthly目錄中,讓它每小時/天/星期、月執行一次。

crontab的使用


我們常用的命令如下:

crontab [-u username]    //省略使用者表表示操作當前使用者的crontab
    -e      (編輯工作表)
    -l      (列出工作表裡的命令)
    -r      (刪除工作作)

我們用crontab -e進入當前使用者的工作表編輯,是常見的vim介面。每行是一條命令。


crontab的命令構成為 時間+動作,其時間有分、時、日、月、週五種,運算子有


* 取值範圍內的所有數字

/ 每過多少個數字

- 從X到Z

,雜湊數字

以下是幾個例子。


時間                  註釋

0 0 25 12 *     //在12月25日的0時0分
*/5 * * * *     //每過5分鐘
* 4-6 * * *     //每天的4 5 6點
* * * * 2,5     //每週二和週五

配合簡單的shell指令碼


如果我們的命令有邏輯判斷等非常複雜的操作時,再直接編輯crontab就有點困難了,這時,我們可以使用shell指令碼。其來歷,分類定義與題不符,不再多說,我們直接說它的用法。


我們用vim /usr/sh/test.sh來使用vim編輯一個shell指令碼

#!/bin/sh           //宣告開始shell指令碼
a = "hello world"   //定義一個shell變數
echo $a             //熟悉的echo,輸出a變數

然後crontab -e編輯crontab,新增 */5 * * * * /usr/sh/test.sh每隔五分鐘執行一次test.sh指令碼,也可以用 /phppath/php /filepath/test.php 來用php程式來執行php程式。


相關文章