Linux課程筆記 Crond介紹

1. 定時任務比較及cron語法

Linux的任務調度可以分為兩類:

  1. 系統自身執行的任務
  2. 用戶執行的工作

?

Linux系統下另外兩種定時任務軟件:

at:適合僅執行一次的調度任務,需要啟動一個名為atd的服務

?

anacron:這個命令主要用于非7*24小時開機的服務器,anacron并不能指定具體時間執行任務,而是以天為周期或者在系統每次開機后需要執行的任務,它會檢測停機期間應該進行,但是并沒有進行的crontab任務工作,執行一遍。

?

這兩種比較少用

?

指令語法:

Crontab? [-u user] file

Crontab? [-u user] {-l |-r |-e}

?

指令說明:

通過crontab我們可以在固定的間隔時間執行指定的系統指令或shell腳本,時間間隔可以是分鐘、小時、日、月、周及以上的任意組合(日和周不要組合)。

?

2. 使用者權限文件

文件

說明

/etc/cron.deny

該文件所列用戶不允許使用crontab命令

/etc/cron.allow

該文件所列用戶允許使用crontab命令

/var/spool/cron

所有用戶crontab文件存放的目錄,以用戶名命名

?

3. 指令選項說明含義表

參數名稱

含義

指定示例

-l(字母)

顯示用戶crontab文件內容,

crontab? -l

-e

進入vi編輯用戶crontab文件

crontab? -e

-i

刪除用戶crontab文件前確認提示

crontab? -i

-r

從crontab目錄中刪除用戶crontab文件

crontab? -r

-u user

指定使用者

crontab? –u qinbf –l

?

4. 指令的使用格式

????? 默認情況下,用戶所見建立的crontab文件存放于/var/spool/cron文件中,其crontab對應的文件名與用戶名一致。

????? 格式共分為七段,前五段為時間設定段,第六段以哪個用戶執行crontab(默認是當前用戶),第七段為所要執行的命令段。

?

5. Crontab時間段的含義如表:

含義

取值范圍

第一段

分鐘

00-59

第二段

小時

00-23

第三段

日期

01-31

第四段

月份

01-12

第五段

星期幾

0-6

?

6. 特殊符號含義如下:

特殊符號

含義

*

表示任意時間都

-

減號,表示分隔符,表示一個時間范圍段

逗號,表示分隔時間段的意思

/n

n代表數字,“即每隔n單位時間”

?

7. crontab依賴的服務:

chkconfig?? --list |grep? crond

?

/etc/init.d/crond? status

?

8. crontab實例說明

1) 30? 3,12? *? *? * /bin/sh /scripts/oldboy.sh

2) 30? */6? *? *? * /bin/sh /scripts/oldboy.sh? #--à第二列*/6表示每6個小時,也相當于6,12,18,24

3)30? 8-18/2? *? *? * /bin/sh /scripts/oldboy.sh #-à第二列8-18/2代表早晨8點到下午18點之間每2小時,也相當于8,10,12,14,16,18

4)*? 23-7/1? *? *? *? /application/apachectl restart?? #----à實際上的效果是,晚上到早上的7點,每小時的每一分鐘都重啟apache,如果是想達到每小時才重啟的話,前面的分鐘段,可以設置為0或者30之類的

5)服務器時間同步:系統每5分鐘同步一次時間

[root@test2 ~]# crontab -l

*/5 * * * * /sbin/ntpdate time.windows.com? >/dev/dull 2&>1

?

9. crontab命令生產環境專業寫法

例1:每一分鐘打印一次自己的名字到/server/log/自己的名字命令的文件中。

答案:

#print char task by oldboy for programmer A at 2010-12-12

*/1? *? *? *? *? echo? “oldboy” >>/server/log/oldboy.log 2>&1

?

例2:每周六、日上午9:00和下午14:00來老男孩linux運維實戰培訓中心學習(/server/script/oldboy.sh)

答案:

#cron? job for ett by oldboy 2010-12-12

00?????? 09,14? *? *? 6,0? /bin/sh /server/script/oldboy.sh >/dev/null 2>&1

針對以上兩生產例子說明:

1寫定時任務要寫清注釋是個好習慣,比如什么人,什么時間,因為誰,做了什么事

2執行任務時可以省略用戶,在執行腳本時,盡量帶上/bin/sh,否則有可能因為腳本沒有執行權限而無法執行

3需要root權限執行的任務可以登錄到root用戶下然后設置,如果不需要root權限,可以登錄到普通用戶下,然后設置,這里要注意不同用戶的環境變量問題。

4定時任務命令的結尾最好加上>/dev/null 2>&1等內容,如果需要打印日志,可以追加到指定日志,不推薦留這種不專業的做法

如果定時任務不加>/dev/null 2>&1等命令設置,時間長了,可能會導致郵件臨時目錄/var/spool/clientmqueue文件數猛增,占用大量磁盤空間inode節點。

5在開發定時任務程序或腳本時,在調試好腳本程序后,應盡量把DEBUG及屏幕輸出的內容命令去掉,如果還需要,可定向到日志里。

?

10. crontab生產解決案例

案例1:No? space? left? on? device故障1

在設置crontab時,提示No ?space? left? on device。用df –k檢查還有空間,用df –i顯示/var已占用100%,如果inode耗盡,則系統上下將不能創建文件。

在/var/spool/clientmqueue/下有超多的文件ls半天沒反應,用rm? -fr? *會自動跳出root,然后用xargs來配合解決。cd? /var/spool/clientmqueue&& ls |xargs rm –f

最后清理了該目錄的內容。當然,如果文件數超多,執行ls |xargs rm –f也會長時間無反應,此時也可以直接cd /var/spool/&&rm –rf clientmqueue,然后mkdir clientmqueque && chmod 770 clientmqueue &&chown smmsp,smmsp? -R /var/spool/clientmqueue。

原因分析:系統中,cron執行的程序有輸出內容,輸出內容會以郵件形式發給cron的用戶,而sendmail沒有啟動所以就會產生這些文件。

解決辦法:開啟郵件服務,并將crontab里面的命令后面加上>/dev/null 2>&1,在做定時腳本時,把屏幕輸出定向到日志中。

?

案例2:No space left on device故障2

(1) when you create a new directory of file,system will say :No space left on device

[ett@linux /var]#mkdir ett

Mkdir:cannot create directory ett’:No space left on device

?

(2) when create crontab for account ett,you will receive error information as follows;

Crotab:installing new crontab

Cron/tmp.6655:No space left on device

Crontab:edits left in /tmp/crontab.6655

解決過程

1檢查分區使用率,df? -h

2檢查/var/lock下的文件,刪除/var/lock/subsys/nfx,touch /var/ett,成功創建文件,刪除/var/ett

3發現刪除/var/lock下的任意一個文件后,都可以成功創建一個文件,再創建就會失敗。

4將檢查擴大到/var/下的其他目錄

5懷疑分區/var/de inode用盡導致上述問題,檢查inode使用率

6分區/var/沒有配置quota

7發現/var/spool/clientmqueue下面有太多的文件,由于系統的郵件服務配置有問題,導致系統發出的郵件堆積在隊列目錄中,占用大量的inode節點。

?

處理方法:確認/var/spool/clientmqueue下的文件已經無用,刪除之,如果文件數量太大,無法使用rm -f * 直接刪除,可以選擇ls |xargs rm -f 或者直接刪除上級目錄,然后重建該目錄,并賦予正確的屬主和權限。

?

最好的解決辦法是重新設置系統郵件,使其能正常發送或找到發郵件的源頭,如本文的crontab任務。

?

結論:分區/var/的 inode全部用盡,free inode為0,導致無法創建新的文件或目錄,以后遇到類似的問題要注意用df? -li檢查inode的使用情況。

?

11. 生產場景如何調試crontab定時任務

?

  1. 在調試時,把任務執行頻率調大一點,如:每分鐘、每5分鐘執行一次;
  2. 用正確的執行任務時間,設置完成后,可以修改下系統當前時間;
  3. 在腳本中加入日志輸出,然后把輸出打印到指定的日志中,然后觀察日志內容,看是否執行正確;
  4. 注意:*/1? *? *? *? *? echo “==” >> /tmp/oldboy.log? >/dev/null? 2>&1這種隱蔽的無法正確執行的任務配置;
  5. 執行腳本中>>或者>后的文件名要加上絕對路徑。
  6. 注意環境變量導致的定時任務故障,比如運行java程序的時候,環境變量要在腳本中重新export一下。
  1. 通過定時任務日志查看調試定時任務

?

12. 定時任務生產問題8條箴言

?

  1. 環境變量問題,典型的是如java程序運行案例
  2. 任務路徑問題,腳本要用絕對路徑
  3. 腳本權限問題,最好帶上/bin/bash,防止忘了為腳本賦予執行的權限帶來問題
  4. 時間變量問題,%號在crontab中被認為是newline,需要用\轉義,crontab中有“date +%Y%m%d”,必須替換為“date +\%Y\%m\%d”,但寫在腳本中就不需要了,這也是老師推薦用腳本文件的原因之一。
  5. >/dev/null 2>&1問題
  6. 定時任務加注釋
  7. 使用腳本程序代替命令
  8. 避免不必要的程序輸出

??

?13. 定時清理垃圾文件

??

crontab? -l |tail -2

#del clientmqueue? files? by oldboy at 2010-09-26

00 00? *? *? 0 /bin/bash? /server/scripts/del_sys_file.sh > /dev/null? 2>&1

?

cat /server/scripts/del_sys_file.sh

find /var/spool/clientmqueue/? -type? f | xargs? rm? -f

?

14. crond章節重點

1) 用戶使用crontab? -e自定義定時任務項目,分為六段,[分、時、日、月、周、指令]。

2) 系統的/etc/crontab定時任務項目分為7段,[分、時、日、月、周、用戶、指令]。

3) crontab定時任務的5個生產基本要領和7點調試技巧,尤其是學會看服務日志來調試

4) 生產環境使用crontab定時任務要注意的8點箴言

5) 重視生產的案例及通過案例為載體來學習鞏固技術知識

轉載于:https://www.cnblogs.com/fengze/p/6752488.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/393089.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/393089.shtml
英文地址,請注明出處:http://en.pswp.cn/news/393089.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python 學習日記第二篇 -- 列表,元組

一、列表 列表是一個可以包含所以數據類型的對象的位置有序集合,它是可以改變的。 1、列表的序列操作(Python3) 123456789101112131415161718192021222324>>> one_list [1,2,3,4]>>> two_list ["jonny","…

【Gamma】PhyLab 測試報告

PhyLab Gamma測試報告 測試中發現的bug Gamma階段新Bug Bug可能原因部分錯誤碼設置與原先拋異常的邏輯沖突原先代碼中使用了一些特殊的辦法處理異常Beta未發現Bug Bug可能原因控制臺新建實驗編號不能以0開頭后端處理編號會將其前導0去除,以數字形式存儲,…

如何使用Node.js,Express和MongoDB設置GraphQL服務器

by Leonardo Maldonado萊昂納多馬爾多納多(Leonardo Maldonado) 如何使用Node.js,Express和MongoDB設置GraphQL服務器 (How to set up a GraphQL Server using Node.js, Express & MongoDB) 從GraphQL和MongoDB開始的最直接的方法。 (The most straightforward…

leetcode954. 二倍數對數組(treemap)

給定一個長度為偶數的整數數組 A&#xff0c;只有對 A 進行重組后可以滿足 “對于每個 0 < i < len(A) / 2&#xff0c;都有 A[2 * i 1] 2 * A[2 * i]” 時&#xff0c;返回 true&#xff1b;否則&#xff0c;返回 false。 示例 1&#xff1a; 輸入&#xff1a;[3,1,…

linux文件內容打印成二進制,如何在二進制文件中只打印可打印字符(相當于Linux下的字符串)?...

在Python3中&#xff0c;以二進制模式打開文件會得到bytes的結果。迭代一個bytes對象可以得到0到255(包括0到255)的整數&#xff0c;而不是字符。從^{} documentation&#xff1a;While bytes literals and representations are based on ASCII text, bytes objects actually b…

1098 均分紙牌

1098 均分紙牌 2002年NOIP全國聯賽提高組 時間限制: 1 s 空間限制: 128000 KB 題目等級 : 黃金 Gold 題目描述 Description有 N 堆紙牌&#xff0c;編號分別為 1&#xff0c;2&#xff0c;…, N。每堆上有若干張&#xff0c;但紙牌總數必為 N 的倍數。可以在任一堆上取若于張紙…

輕松學習分布式|系列3|分布式數據庫。

我們繼續來講分布式&#xff0c;回到我們的創業游戲。 我們的業務規模上來了&#xff0c;客戶也越來越忠誠了。很多客戶都通過我們的訂票服務&#xff0c;來方便自己的行程。 那對這些老客戶&#xff0c;我們的宗旨是&#xff1a;要不斷超越客戶的期待。 所以&#xff0c;我們要…

量子運算 簡單通俗例子_什么是量子計算機? 用一個簡單的例子解釋。

量子運算 簡單通俗例子by YK Sugi由YK Sugi 什么是量子計算機&#xff1f; 用一個簡單的例子解釋。 (What is a quantum computer? Explained with a simple example.) Hi everyone!嗨&#xff0c;大家好&#xff01; The other day, I visited D-Wave Systems in Vancouver…

linux增加端口失敗,端口沒被占用,怎么會bind失敗呢?

今天在一個服務器上部署一個webserver的時候&#xff0c;提示我bind端口失敗&#xff0c;我習慣性的用netstat看了下&#xff0c;沒有被占用啊&#xff01;把問題分享出來后&#xff0c;給力的同事們搜索到了ip_local_port_range這個東西這個東西對應的是/proc/sys/net/ipv4/ip…

leetcode面試題 17.15. 最長單詞

給定一組單詞words&#xff0c;編寫一個程序&#xff0c;找出其中的最長單詞&#xff0c;且該單詞由這組單詞中的其他單詞組合而成。若有多個長度相同的結果&#xff0c;返回其中字典序最小的一項&#xff0c;若沒有符合要求的單詞則返回空字符串。 示例&#xff1a; 輸入&am…

Restful API 設計

1. 簡介 目前 "互聯網軟件"從用客戶端/服務端模式&#xff0c;建立在分布式體系上&#xff0c;通過互聯網通訊&#xff0c;具有高延時、高開發等特點。但是軟件開發和網絡是兩個不同的領域&#xff0c;交集很少。要使得兩個融合&#xff0c;就要考慮如何在互聯網環境…

sql行數少于10_如何用少于100行的代碼創建生成藝術

sql行數少于10by Eric Davidson埃里克戴維森(Eric Davidson) 如何用少于100行的代碼創建生成藝術 (How to Create Generative Art In Less Than 100 Lines Of Code) Generative art, like any programming topic, can be intimidating if you’ve never tried it before. I’v…

安裝輸入發

直接在系統 ——系統管理 ——語言支持 選——中文從新啟動 sudo apt-get install scim-pinyin安裝JAVA環境支持 sudo apt-get install sun-java-jre()要是 apt -get 命令不能用 可能是你 的 源有問題 可以 更新一下 在系統 &#xff0d;系統管理 源設置 選這臺灣的 就可以 …

(第2篇)一篇文章教你輕松安裝hadoop

摘要: 這篇文章將會手把手教你安裝hadoop&#xff0c;只要你細心按照文章中的步驟操作&#xff0c;hadoop肯定能正確安裝&#xff0c;絕對不會讓你崩潰 博主福利 給大家贈送一套hadoop視頻課程 授課老師是百度 hadoop 核心架構師 內容包括hadoop入門、hadoop生態架構以及大型ha…

linux cpio到指定目錄,linux cpio命令存取歸檔包中的文件

功能描述使用cpio命令可以通過重定向的方式將文件進行打包備份及還原恢復&#xff0c;它可以解壓縮以“.cpio”或者“.tar”結尾的文件。命令語 法cpio [選項] [目標目錄]選項含義選項含義-o執行 copy-out 模式&#xff0c;建立備份檔。-i執行 copy-in 模式&#xff0c;還原備份…

leetcode劍指 Offer 20. 表示數值的字符串

請實現一個函數用來判斷字符串是否表示數值&#xff08;包括整數和小數&#xff09;。例如&#xff0c;字符串"100"、“5e2”、"-123"、“3.1416”、"-1E-16"、“0123"都表示數值&#xff0c;但"12e”、“1a3.14”、“1.2.3”、"…

python接口自動化2-發送post請求

前言 發送post的請求參考例子很簡單&#xff0c;實際遇到的情況卻是很復雜的&#xff0c;首先第一個post請求肯定是登錄了&#xff0c;但登錄是最難處理的。登錄問題解決了&#xff0c;后面都簡單了。 一、查看官方文檔 1.學習一個新的模塊&#xff0c;其實不用去百度什么的&am…

簡介瀏覽器內核與JavaScript引擎

本文介紹了常用瀏覽器內核與JavaScript引擎 一、瀏覽器內核 Rending Engine, 顧名思義&#xff0c;稱之為渲染網頁內容的&#xff0c;將網頁的代碼轉換為你看得見的頁面&#xff0c;因為是排版&#xff0c;所以排版&#xff0c;所以肯定會有排版錯誤等問題。為什么會有排版錯誤…

Linux查看tar實用程序,linux tar指令常用選項

linux的tar指令經常被用到&#xff0c;因為壓縮文件的時候通常需要打包文檔&#xff0c;而tar指令就是打包指令&#xff0c;同時gzip壓縮程序和bzip2壓縮程序都是支持tar指令的&#xff0c;所以tar指令在打包的同時還可以用gzip和bzip進行壓縮&#xff0c;這樣多文件可以打包的…

代碼字體mono_如何構建代碼存儲庫:Multi,Mono或Organic?

代碼字體monoby Chetan Sharma由Chetan Sharma 如何構建代碼存儲庫&#xff1a;Multi&#xff0c;Mono或Organic&#xff1f; (How to Structure Code Repositories: Multi, Mono, or Organic?) The newest debate in town is whether you should keep your services in a si…