開(kāi)筆
最近在做數(shù)據(jù)收集涉及到一些日志文件輪轉(zhuǎn)切割,筆者想用一個(gè)定時(shí)任務(wù)來(lái)實(shí)現(xiàn)定時(shí)輪轉(zhuǎn)。調(diào)研后決定使用 Linux 系統(tǒng)的 cron 服務(wù)猎荠。
Cron 是Uninx系(Linux) 操作系統(tǒng)的后臺(tái)駐留程序,系統(tǒng)管理員用得相對(duì)多一些亡鼠。Cron 可以被設(shè)置為開(kāi)機(jī)啟動(dòng)无牵,在 centos 中默認(rèn)就是開(kāi)機(jī)啟動(dòng)的服務(wù)拗馒。
在使用 cron 服務(wù)的時(shí)候冗茸,往往我們都需要 先確認(rèn)cron服務(wù)本身是否開(kāi)啟崖飘,處于運(yùn)行狀態(tài)榴捡,確認(rèn)當(dāng)前用戶(hù)是否有權(quán)限正常使用cron,編輯下發(fā)cron計(jì)劃任務(wù)朱浴,確認(rèn)我們的計(jì)劃任務(wù)是否如約按照計(jì)劃執(zhí)行吊圾。本篇筆者就和大家一起看看:
- 查看當(dāng)前系統(tǒng)cron服務(wù)狀態(tài)
- 管理 cron 服務(wù)
- 配置 corn 服務(wù)權(quán)限
- 編輯下發(fā) cron 計(jì)劃任務(wù)
- 查看 任務(wù)是否按照計(jì)劃執(zhí)行
cron服務(wù)查看
除了可以用 ps 命令查看 cron 服務(wù)進(jìn)程運(yùn)行狀態(tài),還可以查看正在運(yùn)行的cron服務(wù)調(diào)度本身的狀態(tài)翰蠢。通過(guò) crontab 命令對(duì)cron服務(wù)的設(shè)置项乒。用:
man crontab
查看一下crontab命令,發(fā)現(xiàn)梁沧,crontab 有4個(gè)可選參數(shù):
- -u:設(shè)定某個(gè)用戶(hù)的cron服務(wù)板丽,一般root用戶(hù)在執(zhí)行這個(gè)命令的時(shí)候需要此參數(shù)
- -l:列出某個(gè)用戶(hù)cron服務(wù)的詳細(xì)內(nèi)容
- -r:刪除某個(gè)用戶(hù)的cron服務(wù)
- -e:編輯某個(gè)用戶(hù)的cron服務(wù)
cron服務(wù)管理
如果經(jīng)過(guò)查看,我們發(fā)現(xiàn)cron并不是你要的狀態(tài),那么就開(kāi)始管理它吧埃碱。作為后臺(tái)服務(wù)猖辫,cron有著與我們熟知的服務(wù)程序相似地基本管理命令:?jiǎn)?dòng)、停止砚殿、重啟啃憎、重新載入配置(需要稍微注意一點(diǎn),這里是crond 而不是 cron):
-
啟動(dòng)服務(wù):
/sbin/service crond star
-
關(guān)閉服務(wù)
/sbin/service crond stop
-
重啟服務(wù)
/sbin/service crond restart
-
重新載入配置
在每一次重新修改過(guò)cron配置文件似炎,請(qǐng)務(wù)必重新載入一下配置:
/sbin/service crond reload
配置 corn 服務(wù)權(quán)限
在 Linux 操作系統(tǒng)中辛萍,對(duì)用戶(hù)使用cron服務(wù)的權(quán)限控制在 /etc/cron.allow 和 /etc/cron.deny 兩個(gè)文件中配置實(shí)現(xiàn),但 /etc/cron.allow 文件非必須存在的羡藐。
如果 /etc/cron.allow 文件存在贩毕,則所有需要運(yùn)行 crontab 命令的用戶(hù)必須在這個(gè)文件被列舉出來(lái);如果 /etc/cron.allow 文件不存在仆嗦,但
/etc/cron.deny 文件存在辉阶,則所有需要運(yùn)行 crontab 命令的用戶(hù)必須在這個(gè)文件不被列舉出來(lái)。當(dāng)這兩個(gè)文件都不存在的情況下瘩扼,在一些 Linux 系統(tǒng)(如 Ubuntu谆甜、Debian ,但不是所有)允許所有用戶(hù)運(yùn)行 crontab 命令集绰。
需要注意的是规辱,系統(tǒng)中,不在 /etc/shadow 文件所列的用戶(hù)栽燕,是沒(méi)有權(quán)限使用 crontab 命令罕袋。
編輯cron任務(wù)
-
語(yǔ)法
* * * * * Command_to_execute - – – – - | | | | | | | | | +—– Day of week (0–6) (Sunday=0) or Sun, Mon, Tue,… | | | +———- Month (1–12) or Jan, Feb,… | | +————-— Day of month (1–31) | +——————– Hour (0–23) +————————- Minute (0–59)
-
示例
每天凌晨輪轉(zhuǎn)nginx的access日志
01 00 * * * /usr/sbin/logrotate /etc/logrotate.d/nginx-access-log.conf
系統(tǒng)便會(huì)在每天凌晨壹分的時(shí)刻執(zhí)行
/usr/sbin/logrotate /etc/logrotate.d/nginx-access-log.conf
命令,實(shí)際就是每天凌晨進(jìn)行日志輪轉(zhuǎn)