其實(shí)大部分系統(tǒng)管理工作都是通過定期自動執(zhí)行某個(gè)腳本來完成的,那么如何定期執(zhí)行某個(gè)腳本呢?這就要借助Linux的cron功能了。這部分內(nèi)容很重要,請大家牢記!
14.5.1命令crontab
Linux任務(wù)計(jì)劃功能的操作都是通過crontab命令來完成的,其常用的選項(xiàng)有以下幾個(gè)。
-u:表示指定某個(gè)用戶,不加-u選項(xiàng)則為當(dāng)前用戶。
-e:表示制定計(jì)劃任務(wù)。
-l:表示列出計(jì)劃任務(wù)。
-r:表示刪除計(jì)劃任務(wù)。
下面請跟著阿銘來創(chuàng)建第一個(gè)任務(wù)計(jì)劃,如下所示:
# crontab -e no crontab for root - using an empty one這里使用crontab -e來編寫任務(wù)計(jì)劃,這實(shí)際上是使用vim工具打開了crontab的配置文件,我們寫下如下內(nèi)容:
01 10 05 06 3 echo "ok" > /root/cron.log這里每個(gè)字段的數(shù)字分別表示什么呢?從左到右依次為:分、時(shí)、日、月、周和命令行。上例表示在6月5日(這一天必須是星期三)的10點(diǎn)01分執(zhí)行命令:
echo "ok" > /root/cron.log。命令crontab -e實(shí)際上是打開了/var/spool/cron/username文件(如果用戶是root,則打開的是/var/spool/cron/root)。
打開這個(gè)文件使用了vim編輯器,所以保存時(shí)在命令行模式下輸入:wq即可。但是請千萬不要直接去編輯那個(gè)文件,否則會出錯(cuò),所以一定要使用命令crontab -e來編輯。
查看已經(jīng)設(shè)定的任務(wù)計(jì)劃使用crontab -l命令,如下所示:
# crontab -l 01 10 05 06 3 echo "ok" > /root/cron.log刪除任務(wù)計(jì)劃要使用crontab -r命令,這個(gè)刪除選項(xiàng)最好還是少用,因?yàn)樗鼤幌伦影讶坑?jì)劃都刪除掉。如果你想只刪除一條計(jì)劃,可以使用-e選項(xiàng)進(jìn)入crontab進(jìn)行編輯。-r選項(xiàng)用法如下所示:
# crontab -r # crontab -l no crontab for root14.5.2cron練習(xí)題
Cron的內(nèi)容不算太難,但需要你牢固掌握。下面阿銘給出一些練習(xí)題,幫助你熟悉cron的應(yīng)用。
每天凌晨1點(diǎn)20分清除/var/log/slow.log這個(gè)文件。
每周日3點(diǎn)執(zhí)行/bin/sh /usr/local/sbin/backup.sh。
每月14日4點(diǎn)10分執(zhí)行/bin/sh /usr/local/sbin/backup_month.sh。
每隔8小時(shí)執(zhí)行ntpdate time.windows.com。
每天的1點(diǎn)、12點(diǎn)和18點(diǎn)執(zhí)行/bin/sh /usr/local/sbin/test.sh。
每天的9點(diǎn)到18點(diǎn)執(zhí)行/bin/sh /usr/local/sbin/test2.sh。
下面是以上習(xí)題的答案,僅作參考。
201***echo"">/var/log/slow.log 03**0/bin/sh/usr/local/sbin/backup.sh 10414**/bin/sh/usr/local/sbin/backup_month.sh 0*/8***ntpdatetime.windows.com 01,12,18***/bin/sh/usr/local/sbin/test.sh 09-18***/bin/sh/usr/local/sbin/test2.sh練習(xí)完上面的題目,你可能會有一些小疑問。這里要簡單說明一下,每隔8小時(shí)就是用全部小時(shí)(0~23)去除以8,結(jié)果算出來應(yīng)該是0、8和16這3個(gè)數(shù)。
當(dāng)遇到多個(gè)數(shù)(分鐘、小時(shí)、月、周)時(shí),則需要用逗號隔開,比如第5題中的1,12,18。時(shí)間段是可以用n-m的方式表示的,比如第6題中的9-18。
設(shè)置好了所有的任務(wù)計(jì)劃后,我們需要查看一下crond服務(wù)是否已經(jīng)啟動,如下所示:
# systemctl status crond ● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2020-06-26 1517 CST; 1h 22min ago Main PID: 820 (crond) Tasks: 1 (limit: 11353) Memory: 1.9M CGroup: /system.slice/crond.service └─820 /usr/sbin/crond -n 6月 26 1517 aminglinux-123 systemd[1]: Started Command Scheduler. 6月 26 1517 aminglinux-123 crond[820]: (CRON) STARTUP (1.5.2) 6月 26 1517 aminglinux-123 crond[820]: (CRON) INFO (Syslog will be used instead of sendmail.) 6月 26 1517 aminglinux-123 crond[820]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 8% if used.) 6月 26 1517 aminglinux-123 crond[820]: (CRON) INFO (running with inotify support) 6月 26 1601 aminglinux-123 CROND[2042]: (root) CMD (run-parts /etc/cron.hourly) 6月 26 1701 aminglinux-123 CROND[4032]: (root) CMD (run-parts /etc/cron.hourly)看Active那行,如果是啟動狀態(tài)顯示為active(running),未啟動則顯示為inactive (dead)。
審核編輯:劉清
-
Linux系統(tǒng)
+關(guān)注
關(guān)注
4文章
594瀏覽量
27418
發(fā)布評論請先 登錄
相關(guān)推薦
評論