歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Ubuntu下用crontab 部署定時任務

Ubuntu下用crontab 部署定時任務

日期:2017/3/1 12:23:33   编辑:關於Linux
用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 優先。 如果兩個文件都不存在,那麼只有超級用戶可以安排作業。
Copyright © Linux教程網 All Rights Reserved