2021-05-12 14:32:11
Ubuntu下用crontab 部署定時任務
用php做了一個網站,其中一個統計工能,需要每週定時用行。想看看有什麼方法,之前看別人的東西,一般有2中方式,一個是php自帶的定時任務,一個是用系統帶的,Linux下的crontab和Windows下的定時任務。
之前用了php自帶的定時任務工能,發現實現起來很簡單,中間也沒出現很多問題,同時做的時候對 ob_flush() 和 flush() 等函數不是很熟,後來又看了相關的一些文章,
對其中的東西有了深入的了解。但是後來發現php定時任務開啟後,貌似不能停止,不需要重新啟動伺服器才行。不能通過修改php檔案來解決。
後來就打算用Linux下的crontab來實現。這次用的是Ubuntu來做部署系統,nginx來做伺服器。此系統下自帶crontab,所以不用自己安裝。
開啟crontab紀錄檔
crontab預設情況下是不執行開啟日子的,所以一開始寫完後,不能執行,想檢視紀錄檔,卻找不到。所以先開啟定時任務的紀錄檔來檢視
修改rsyslog服務,將 /etc/rsyslog.d/50-default.conf 檔案中的 #cron.* 前的 # 刪掉;用以下命令重新啟動rsyslog服務:
service rsyslog restart;
然後再重新啟動crontab服務:
service cron restart;
網上很多人說開啟,停止或者重新啟動contab服務用命令 service crond restart,執行這個命令會報出 unrecognised service ,這裡吧 crond 改成 cron 就可以了。
之後,在這個位置 /var/log/cron.log 就可以檢視定時任務的檔案紀錄檔檔案了;
下面這個命令還可以檢視crontab的狀態
service cron status;
檢視執行時的紀錄檔檔案,如果在紀錄檔檔案中執行一條語句後出現:
No MTA installed, discarding output
則crontab執行指令碼時是不會直接錯誤的資訊輸出,而是會以郵件的形式傳送到郵箱裡,需要郵件伺服器了,如果沒有安裝郵件伺服器,它就會報這個錯。
可以在每條定時指令碼後面加入:
>/dev/null 2>&1
即將所有資訊輸入到linux系統中的空裝置/dev/null中。
即可解決No MTA installed, discarding output的問題。
寫定時任務
通過如下命令,就可以開啟本使用者的定時檔案,檔案存放在 /var/spool/cron/crontabs 資料夾下
並且以用的的名字命名的檔案
crontab -e
可以通過以下命令列出某個使用者cron服務的詳細內容
crontab -l
我先寫了個定時任務測試以下,用php寫了一個功能,每分鐘向資料庫中寫入一條資料,定時任務每分鐘執行url就可以
1 * * * * curl servername/Home/Test/test >/dev/null 2>&1
curl也是Ubuntu自帶的,不用另外安裝。此條命令單獨在命令列執行是可以的。
在crontab中發現好像不能執行,後來發現每分鐘不能這樣寫,分鐘位要寫成 */1,才能執行,下面是從別人那拷貝過來的幾個命令,不過我都試過
複製程式碼
每五分鐘執行 */5 * * * *
每小時執行 0 * * * *
每天執行 0 0 * * *
每週執行 0 0 * * 0
每月執行 0 0 1 * *
每年執行 0 0 1 1 *
複製程式碼
在最終能用之前我還執行過以下命令,是給root賦許可權。但是在我最終能執行時,我不知道這條命令有沒有起作用。不過還是先寫上。執行後需要重新啟動crontab服務
crontab -u root /var/spool/cron/crontabs/root
之前不能執行的時候,看到很多人說不能執行是環境變數的問題,需要修改。不過我這次並沒有遇到。不過先記下來。以後可能會用到。
我用的是root使用者寫的定時任務,並且看到他人寫的下面內容,下次試一下
/etc/cron.deny 表示不能使用crontab 命令的使用者
/etc/cron.allow 表示能使用crontab的使用者。
如果兩個檔案同時存在,那麼/etc/cron.allow 優先。
如果兩個檔案都不存在,那麼只有超級使用者可以安排作業。
Linux中利用crontab建立計劃任務 http://www.linuxidc.com/https://www.linuxidc.com/Linux/2013-06/86401.htm
Linux中用crontab例行工作安排 http://www.linuxidc.com/https://www.linuxidc.com/Linux/2013-06/85441.htm
Linux crontab不執行問題排查 http://www.linuxidc.com/https://www.linuxidc.com/Linux/2013-06/85432.htm
Ubuntu使用crontab定時任務 http://www.linuxidc.com/https://www.linuxidc.com/Linux/2013-05/84770.htm
Linux計劃任務(at batch crontab anacron) http://www.linuxidc.com/https://www.linuxidc.com/Linux/2013-03/81584.htm
Linux任務計劃 (at,crontab) http://www.linuxidc.com/Linux/2015-09/122970.htm
本文永久更新連結地址:http://www.linuxidc.com/Linux/2015-10/124110.htm
相關文章