Linux系統(tǒng)定時(shí)任務(wù)

一、什么是定時(shí)任務(wù)?

周期性的執(zhí)行任務(wù)計(jì)劃的軟件,Linux定時(shí)任務(wù)的常用軟件crond.

二、使用定時(shí)任務(wù)軟件,按需重復(fù)執(zhí)行工作。

例如:備份都是0點(diǎn)以后,2點(diǎn)爬起來(lái)備份,4點(diǎn)以后睡覺(jué)。
需要寫(xiě)一個(gè)程序?qū)崿F(xiàn)自動(dòng)備份,然后讓定時(shí)任務(wù)軟件幫你執(zhí)行。

三、如何使用

1)用戶定時(shí)任務(wù)計(jì)劃
cron是定時(shí)任務(wù)的軟件名。
crond是服務(wù)進(jìn)程名,真正實(shí)現(xiàn)定時(shí)任務(wù)服務(wù)。
crontab命令是用來(lái)設(shè)置定時(shí)任務(wù)規(guī)則的配置命令。

要想配置定時(shí)任務(wù),首先啟動(dòng)cron服務(wù)

[root@app1 logrotate.d]# systemctl status crond
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2019-06-10 19:56:50 CST; 17min ago
 Main PID: 6567 (crond)
   CGroup: /system.slice/crond.service
           └─6567 /usr/sbin/crond -n

Jun 10 19:56:50 app1 systemd[1]: Started Command Scheduler.
Jun 10 19:56:51 app1 crond[6567]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 36% if used.)
Jun 10 19:56:51 app1 crond[6567]: (CRON) INFO (running with inotify support)

crond服務(wù)命令

systemctl start crond.service
systemctl stop crond.service
systemctl enable crond.service
systemctl disable crond.service

內(nèi)容存放位置/var/spool/cron/
以當(dāng)前用戶名作為文件名
-l 查看已經(jīng)設(shè)置的定時(shí)任務(wù)
-e 編輯定時(shí)任務(wù)
-u 查看特定用戶下定時(shí)任務(wù)

編寫(xiě)定時(shí)任務(wù)的語(yǔ)法

[root@app1 cron]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  *  command to be executed

共六列:
第一列:分minute (0 - 59)
第二列:時(shí)hour (0 - 23)
第三列:日day of month (1 - 31)
第四列:月month (1 - 12)
第五列:周day of week (0 - 6)
第六列:要執(zhí)行的任務(wù)命令或程序
特殊符號(hào):

  • 表示的 每或每一 的意思
    00 23 * * * cmd 每天23點(diǎn)00分執(zhí)行任務(wù)
  • 連續(xù)區(qū)間 1-10
    00 8-23 * * * cmd 每天8點(diǎn)至23點(diǎn),每小時(shí)執(zhí)行任務(wù)
    , 列舉 1,2,3,4,8
    00 1,2,3,4,8 * * * cmd 每天1點(diǎn)、2點(diǎn)、3點(diǎn)、4點(diǎn)、8點(diǎn)執(zhí)行任務(wù)
    /n n是數(shù)字,每隔n單位時(shí)間
    */10 * * * * cmd 每隔10分鐘執(zhí)行一次任務(wù)
    30 */6 * * * cmd 每隔6小時(shí)的30分執(zhí)行任務(wù)
    30 8-12/2 * * * cmd 每天8點(diǎn)至12點(diǎn),每隔2小時(shí)的30分執(zhí)行任務(wù)
    45 4 1,10,22 * * cmd 每月1號(hào)、10號(hào)、22號(hào)4點(diǎn)45分執(zhí)行任務(wù)
    10 1 * * 6,0 cmd 每周六周日1點(diǎn)10執(zhí)行任務(wù)
yum install ntpdate
crontab -e
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null

日志信息
/var/log/cron

備注:執(zhí)行命令最后編寫(xiě)腳本,由cron調(diào)用腳本執(zhí)行定時(shí)任務(wù)。

2)系統(tǒng)定時(shí)任務(wù)計(jì)劃

[root@app1 logrotate.d]# ll /etc/cron.daily/logrotate /etc/logrotate.conf 
-rwx------. 1 root root 219 Oct 31  2018 /etc/cron.daily/logrotate
-rw-r--r--. 1 root root 662 Jul 31  2013 //etc/logrotate.conf

四、定時(shí)任務(wù)書(shū)寫(xiě)要領(lǐng)

1)為定時(shí)任務(wù)添加注釋
2)所有定時(shí)任務(wù)盡量都以腳本的形式執(zhí)行
3)在執(zhí)行的shell腳本前加上/bin/sh
4)定時(shí)任務(wù)中命令或腳本的結(jié)尾加 >/dev/null 2>&1
5)在指定用戶下執(zhí)行相關(guān)定時(shí)任務(wù)
6)生產(chǎn)任務(wù)計(jì)劃程序中不要隨意打印輸出信息,有輸出的法辦法去掉
7)定時(shí)任務(wù)執(zhí)行腳本要存放到規(guī)范路徑下
8)配置定時(shí)任務(wù)要規(guī)范操作過(guò)程,減少出錯(cuò)
9)定時(shí)任務(wù)腳本中程序命令及路徑盡量用全路徑
10)時(shí)間變量%號(hào)要用反斜線轉(zhuǎn)義(只有定時(shí)任務(wù)里時(shí)間命令需要)
11)若腳本中調(diào)用了系統(tǒng)環(huán)境變量,要重新定義
12)出錯(cuò)或無(wú)法執(zhí)行,檢果/var/log/cron日志

五、案例分析

1)環(huán)境變量問(wèn)題
定時(shí)任務(wù)在執(zhí)行腳本的時(shí)候,多數(shù)情況沒(méi)辦法加載環(huán)境變量,特別是/etc/profile。
登陸后測(cè)試成功,但是添加到定時(shí)任務(wù)時(shí)無(wú)法執(zhí)行。
分析:
命令行以bash登陸
手工登陸后,加載所有環(huán)境變量
(/.bash_profile,/.bash_rc,/etc/profile,/etc/bashrc)
定時(shí)任務(wù)執(zhí)行腳本屬于非登陸狀態(tài)
解決:
定時(shí)任務(wù)腳本添加export環(huán)境變量

2)No space left on device故障
磁盤(pán)滿的報(bào)錯(cuò),原因往往是inode被占滿。
df -i
分析:
因?yàn)槎〞r(shí)任務(wù)沒(méi)有加&>/dev/null,定時(shí)任務(wù)執(zhí)行的時(shí)候把輸出給系統(tǒng)root發(fā)郵件。 郵件服務(wù)器postfix服務(wù)默認(rèn)關(guān)閉,所以給系統(tǒng)發(fā)的郵件就會(huì)產(chǎn)生在臨時(shí)目錄(產(chǎn) 生大量小文件)。
cent6 /var/spool/clientmqueue
cent7 /var/spool/postfix/maildrop/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容