linux 定時任務(crontab)

      網(wǎng)友投稿 1025 2022-05-30

      簡介

      crond 是linux下用來周期性的執(zhí)行某種任務或等待處理某些事件的一個守護進程,與windows下的計劃任務類似,當安裝完成操作系統(tǒng)后,默認會安裝此服務 工具,并且會自動啟動crond進程,crond進程每分鐘會定期檢查是否有要執(zhí)行的任務,如果有要執(zhí)行的任務,則自動執(zhí)行該任務

      命令格式

      命令格式:crontab [-u username] [-l|-e|-r]

      參數(shù):

      -u: 只有root才能進行這個任務,也即幫其他用戶新建/刪除crontab工作調(diào)度;

      -e: 編輯crontab 的工作內(nèi)容;

      -l: 查閱crontab的工作內(nèi)容;

      -r: 刪除所有的crontab的工作內(nèi)容,若僅要刪除一項,請用-e去編輯

      查看幫助文檔

      如果使用 crontab -h 會報錯,但也會輸出一個簡寫的幫助文檔

      正確的查看幫助文檔的方法是使用 man crontab

      系統(tǒng)的計劃任務放在 /etc/crontab,并且里面有計劃參數(shù)的解析注釋 <分鐘> <小時> <當月的第幾日> <月> <每周的第幾天> <定時執(zhí)行的命令>

      周的數(shù)字為0或7時,都代表“星期天”的意思。另外,還有一些輔助的字符,大概有下面這些:

      編寫定時任務

      crontab的環(huán)境變量在 /etc/crontab 中,與我們系統(tǒng)的環(huán)境變量不同,因此所有文件都要用絕對路徑。用相對路徑不能正常執(zhí)行。

      下面以每分鐘執(zhí)行一次為例

      定時執(zhí)行計劃

      cron.crontab

      * * * * * echo `date '+\%F \%T' > /home/chen/output.txt`

      1

      定時執(zhí)行腳本

      不包含變量

      shell1.crontab

      */1 * * * * /home/chen/test1.sh`

      1

      test1.sh

      #!/bin/bash #!/bin/bash echo test >> /home/chen/output.txt

      1

      2

      3

      包含變量

      shell2.crontab

      */1 * * * * /home/chen/test1.sh >> /home/chen/output.txt

      1

      test2.sh

      #!/bin/bash start_time=`date -d '-1 minute' '+%F %T'` end_time=`date '+%F %T'` echo ${start_time} ${end_time}

      1

      2

      linux 定時任務(crontab)

      3

      4

      定時執(zhí)行python腳本

      python控制臺重定向到文件

      py1.crontab

      * * * * * /usr/bin/python home/chen/print.py >> /home/chen/output.txt

      1

      print.py

      #!/usr/bin/python # -*- coding: UTF-8 -*- import datetime now_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") before_time = (datetime.datetime.now()+datetime.timedelta(minutes=-1)).strftime("%Y-%m-%d %H:%M:%S"); print before_time, now_time

      1

      2

      3

      4

      5

      6

      7

      8

      python直接寫入文件

      py2.crontab

      * * * * * python home/chen/file.py

      1

      file.py

      #!/usr/bin/python # -*- coding: UTF-8 -*- import datetime now_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") before_time = (datetime.datetime.now()+datetime.timedelta(minutes=-1)).strftime("%Y-%m-%d %H:%M:%S"); #print before_time, now_time f = open('/home/chen/output.txt', 'a'); f.write(before_time + ' &' + now_time + '\n') f.close();

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      常用命令

      執(zhí)行定時任務 crontab <腳本路徑> 命令執(zhí)行計劃,例如 crontab task1.crontab

      列出當前任務 cronta -l

      編輯當前任務 crontab -e

      刪除所有任務 crontab -r

      注意事項

      在自定義的 crontab 文件 和 crontab -e 的定時任務編輯器中,可以定義變量

      統(tǒng)一時刻,只能執(zhí)行一個定時任務。當運行新的任務時,之前的任務會被自動取消

      定時計劃可以用批處理文件,例如:* * * * * <批處理文件的完整路徑>。一定要用完整路徑,而非相對路徑?。?!

      定時任務的百分號%前面一定要加一個轉(zhuǎn)義符號\,如果不加會被當做換行符,而不是命令

      任務計劃中可以定義變量<變量名>=<變量值>。但是“變量值”只能是常量,不能引用其他變量。例如end_time=${date '+%F %T'} 會被當做字符串原樣輸出,無法達到預期效果。如果要定義這種變量,建議換至shell文件中。

      如果定時任務沒有任何反應,一定是計劃文件中的語法有誤

      由于定時任務都是在后臺執(zhí)行的,因此沒有回顯,可以通過重定向到文件,判斷其是否執(zhí)行成功。另外,通過 tail -f <文件絕對路徑> 持續(xù)輸出

      查看日志

      編輯配置文件 sudo vim /etc/rsyslog.d/50-default.conf

      將cron前面的注釋符去掉 cron.* /var/log/cron.log。

      保存文件時用 : w ! sudo tee %

      tee 用于讀取輸入文件,同時保存。%表示當前編輯文件。

      注意:該方法要求當前編輯用戶必須在 sudoers這個文件中,這也是執(zhí)行sudo命令的要求。

      之后重啟 rsyslog 和 cron

      sudo service rsyslog restart sudo service cron restart

      1

      2

      后面執(zhí)行 cat /var/log/cron.log 即可查看后續(xù)日志了

      查看日志可以發(fā)現(xiàn),每當啟用一個定時任務,之前的就被替換了(即同一時刻只能存在一個定時任務)

      發(fā)現(xiàn)報錯:(CRON) info (No MTA installed, discarding output)

      原因有兩個:

      命令中含有shell指令

      執(zhí)行任務過程中會往屏幕輸出內(nèi)容

      報錯原因:報錯的主要原因是沒有配置郵件服務器

      解決辦法:安裝并重新配置郵件服務器

      sudo apt-get install postfix sudo dpkg-reconfigure postfix

      1

      2

      MAIL (mailed 26 bytes of output but got status 0x004b from MTA#012)

      查看日志 tail -f /var/log/cron.log,發(fā)現(xiàn)報錯

      由于是郵件錯誤,因此查看郵件日志 tail /var/log/mail.log。錯誤如下:fatal: open /etc/postfix/main.cf: No such file or directory

      執(zhí)行 sudo dpkg-reconfigure postfix 命令,在配置項里面選擇除了第1項以外的(我是選第2項)

      Linux

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Python:數(shù)據(jù)提取之JSON與JsonPATH
      下一篇:不知道IDEA的這些個性化配置,你怎么能說自己會用它
      相關(guān)文章
      国产亚洲成归v人片在线观看 | 亚洲精品无码不卡在线播HE| 亚洲.国产.欧美一区二区三区| 亚洲午夜精品一区二区公牛电影院 | 亚洲色图综合在线| 精品无码专区亚洲| 精品亚洲av无码一区二区柚蜜| 337p日本欧洲亚洲大胆人人| 国产青草亚洲香蕉精品久久| 国产精品久久久久久亚洲影视| 欧美激情综合亚洲一二区| 亚洲AV无码专区国产乱码不卡| 亚洲精品无码不卡在线播放| 亚洲精华国产精华精华液好用| 亚洲av无码有乱码在线观看| 国产成人精品亚洲| 亚洲国产成人精品女人久久久| www国产亚洲精品久久久日本| 看亚洲a级一级毛片| 亚洲精品国自产拍在线观看| 在线观看亚洲成人| 亚洲Av综合色区无码专区桃色| 亚洲精品免费观看| 亚洲日韩乱码中文无码蜜桃臀| 亚洲一级毛片免费在线观看| 亚洲中文精品久久久久久不卡| 亚洲国产成人无码AV在线| 国产亚洲精品第一综合| 亚洲麻豆精品国偷自产在线91| 亚洲熟妇av一区二区三区漫画| 久久精品国产亚洲av麻豆| 亚洲视频免费在线看| 亚洲国产成+人+综合| 亚洲熟妇丰满xxxxx| 黑人粗长大战亚洲女2021国产精品成人免费视频| 亚洲日韩在线中文字幕综合 | 亚洲女人影院想要爱| 亚洲性无码AV中文字幕| 九月婷婷亚洲综合在线 | 亚洲一区二区三区在线观看蜜桃| 亚洲无码一区二区三区|