linux計畫任務 學習筆記

2022-05-17 21:39:11 字數 3988 閱讀 9039

本文說的計畫任務是指linux的cronjob。

語法

下面是個簡單的計畫任務:

10 * * * * /usr/bin/php /www/virtual/username/cron.php > /dev/null 2>&1

它主要有兩部分組成:

1.」10 * * * *」 ,這是定時器。

2.其他部分是命令,它們會在命令列執行。

這個例子中,命令本身又有三個部分:

1.」/usr/bin/php」。php指令碼通常不會自己執行,它需要通過php解析器來執行。

2.」/www/virtual/username/cron.php」。這個是需要執行的指令碼的路徑。

3.」> /dev/null 2>&1″。這部分是處理指令碼的輸出的。稍後我們詳細說它。

定時器語法

就是上面計畫任務的第一部分。它決定了何時執行計畫任務。

它包含5部分:

1.分鐘(0-59)

2.小時(0-23)

3.乙個月的哪一天(1-31)

4.一年中的哪個月(1-12)

5.星期幾(0是星期天)

星號

如果某個部分出現的是星號而不是數字,就是說明這個部分表示的時間全部會執行。

不太容易說清楚,看例子吧。

示例:

下面的計畫任務會一直執行

* * * * * [command]

下面的計畫任務會在每個小時的0分時執行(就是每小時執行一次)

0 * * * * [command]

下面依舊是乙個每小時執行一次的計畫任務。不過是在每個小時的一刻鐘時執行的(1:15,2:15.。。)

15 * * * * [command]

下面的計畫任務每天執行一次,在2:30分

30 2 * * * [command]

下面的計畫任務是在每個月2號的午夜執行(比如:2023年2月2日00:00)

0 0 2 * * [command]

下面的計畫任務會在每週一的每個小時0分鐘時執行一次

0 * * * 1 [command]

下面的會每小時執行3次,在0分,10分,和20分時

0,10,20 * * * * [command]

下面是用除號「/」表示每多少執行一次。本例是每5分鐘執行一次

*/5 * * * * [command]

還可以用「-」表示乙個範圍,如下表示5到10點的每個整點執行一次

0 5-10 * * * [command]

另外還有乙個特殊的時間關鍵字「@reboot」,就是每次重啟伺服器時執行計畫任務

@reboot [command]

設定和管理計畫任務crontab -e

如果你只想看看,不需要編輯,可以使用以下的命令

crontab -l

要刪除crontab的內容,就是刪除所有的計畫任務,可以這樣:

crontab -r

系統會詢問「remove crontab for 使用者名稱?」你敲下y,就刪除了使用者的crontab了

通重載入檔案來設立計畫任務

crontab cron.txt

這個要謹慎,因為這將會覆蓋掉原本的計畫任務的內容。

注釋

注釋使用#字元。例如:

# this cron job does something very important   

10 * * * * /usr/bin/php /www/virtual/username/cron.php > /dev/null 2>&1

設定e-mail

預設情況下,計畫任務的輸出會傳送到email,除非你取消他,或是定向到乙個檔案。這樣設定mailto:

mailto="[email protected]"  

# this cron job does something very important   

10 * * * * /usr/bin/php /www/virtual/username/cron.php > /dev/null 2>&1

使用php解析器

cgi指令碼預設是可以執行的,但是php指令碼不行。他們需要用php解析器來執行。這就是我們要把php解析器的路徑放到php指令碼前的原因。

* * * * * /usr/bin/php [path to php script]

有時候php解析器可能在這裡」/usr/local/bin/php」。我們可以用下面的命令找到正確的路徑:

輸入:which php

系統反饋:/usr/local/bin/php

ok,我們就知道php解析器的路徑了。

處理輸出

如果你不處理輸出,它們會傳送mail到你的伺服器賬號裡。

如果你在命令行尾新增」> /dev/null 2>&1″,輸出將會丟棄。(其他命令後面接它也會丟棄輸出)。

$ /usr/local/bin/php hello.php

hello world

$ /usr/local/bin/php hello.php > /dev/null 2>&1

$大於號(>)用於重定向輸出。」/dev/null」是個空裝置,輸出到那裡就會忽略掉。

「2>&1″是標準錯誤輸出,定向到標準輸出。也是到」/dev/null」.

輸出到檔案

輸出到檔案也是用的大於號「>」.

10 * * * * /usr/bin/php /www/virtual/username/cron.php > /var/log/cron.log

這將會每次都覆蓋原來的輸出。如果你想要的是追加到以前的輸出後面,可以用兩個大於號」>>」來處理。

10 * * * * /usr/bin/php /www/virtual/username/cron.php >> /var/log/cron.log

可執行指令碼#!/usr/local/bin/php   

<?php  

echo "hello world/n";  

// ...  

?>

再設定一下許可權,使之可執行,比如chmod到755.

比如上面的hello.php,再 「chmod 755 hello.php」

直接執行:

$ ./hello.php

hello world

$這時,你的計畫任務就可以這樣寫了

10 * * * * /www/virtual/username/hello.php

防止定時任務撞車$fp = fopen('/tmp/lock.txt', 'r+');   

if(!flock($fp, lock_ex | lock_nb))   

/* ... */  

fclose($fp);

過程:開啟檔案,判斷檔案是否鎖定,鎖定了就退出。這樣第乙個計畫任務沒執行結束時,檔案不會關閉,也就沒有解鎖。

下乙個時間觸發的計畫任務,也嘗試開啟檔案,發現已被鎖定,於是退出。這樣就不會撞車了。

組織web訪問計畫任務

如果你用php寫了計畫任務,那你要保證其他人不可以從web訪問到它。簡單的方法是把這些指令碼放到web目錄外。

如果無法放到web目錄外,可以在計畫任務要執行的指令碼的目錄下,用.htaccess 檔案控制:

deny from all

你也可以在php指令碼裡限制:

if (isset($_server['remote_addr'])) die('permission denied.');

這將保證,如果是從網路來的,會立即停止php指令碼的執行。

Linux筆記之計畫任務

計畫任務有一次性和長期性之分 part 1 一次性任務 引數 作用at 時間 安排一次性任務 atq 或 at l 檢視任務列表 at c 序號 瀏覽任務與設定環境 atrm 序號 刪除任務 root okaka desktop at 14 45 at service network restart...

Linux入門筆記(計畫任務)

計畫任務的方式可以有兩種 在 linux 中實現這兩個功能就要使用到at和crontab這兩個命令 要使用單一計畫任務時,linux 必須要有負責這類計畫任務的服務,那就是atd服務。使用 yum y install at然後手動啟動它 systemctl restart atd 重新啟動 atd ...

Linux計畫任務

1.at命令 指定乙個時間執行乙個任務。2.cron命令 根據乙個時間表自動執行任務。3.anacron命令 在乙個指定時間間隔錯過後自動執行任務。at命令 安排乙個任務在未來執行,需要乙個系統後台atd程序。4.如果這個程序沒有開啟,那麼執行 etc init.d atd restart chkc...