⑴ 創建周期性任務 cron
本篇中主要從具體的實例中說明怎樣創建計劃任務
1,周期性任務計劃:cron
(1)相關的程序包:默認已安裝
使用 rpm –qi cronie 查看相關包具體信息
cronie: 主程序包,提供crond守護進程及相關輔助工具
cronie-anacron: cronie的補充程序,用於監控cronie任務執行狀況,如cronie中的任務在過去該運行
(2)計劃周期性執行的任務提交給crond,到指定時間會自動運行
系統cron任務:系統維護作業
(3)要確保crond守護處於運行狀態:查看crond服務是否啟動
CentOS 7:
systemctl status crond 查看是否啟動
systemctl start crond 啟動方法
CentOS 6:
service crond status查看是否啟動
service crond start啟動方法
(4)系統cron任務:系統維護作業
/etc/crontab 將計劃任務寫入該文件
用戶cron任務:
crontab命令 使用crontab命令創建
(5)日誌: /var/log/cron 監控計劃任務
2.系統計劃任務
(1)查看任務 vim /etc/crontab
示例:每隔10分鍾執行一次磁碟空間檢查和磁碟節點號檢查,一旦發現任何分區利用率大於80就執行wall警報
1、解釋:第1位 */10 表示每10分鍾執行一次(注意,*/#這里#僅限能被60 整除的數,如 */12 表示每12分執行一次)
第2位* 小時,*代表每個小時都要執行,2代表凌晨兩點執行,20代表晚上8點執行(24小時制)
第3位*日,*代表每天執行,4 表示每月4號執行。20代表每月20號執行(1-31天)
第4位*月,*代表每月都執行,1代表一月,2代表2月 (1-12月)
第5位*星期幾,*代表任意一天,1表示星期一,(0-7,0和都表示星期日)
第6位root 表示執行人是root
第7位/root/bin 執行的操作,可以是一條命令,也可以是腳本名稱,注意這里寫上完整的路徑。
2.腳本示範
注意:(1)沒有被重定向的輸出會被郵寄給用戶
(2)根用戶root能夠修改其它用戶的作業
(3)運行結果的標准輸出和錯誤以郵件通知給相關用戶
執行的命令結果最好導入垃圾桶中
COMMAND &> /dev/null
(4)對於cron任務來講, %有特殊用途;如果在命令中要使用%,則需要轉義,將%放置於單引號中,則可不用轉義
建議將執行的操作寫入腳本中,不要直接寫在/etc/crontab中
(5)命令在寫入腳本或者/etc/crontab之前,建議先做測試
(6)這里寫完腳本後要把腳本加上執行許可權,chmod +x checkdisk.sh(腳本名)
3.用戶周期性任務
(1)用戶cron:
crontab命令定義,每個用戶都有專用的cron任務文件:/var/spool/cron/USERNAME
crontab命令:本身有suid 許可權
crontab [-u user] [-l | -r | -e] [-i]
-l: 列出所有任務;
-e: 編輯任務;
* * * * * wall I am
-r: 移除所有任務;
-i:同-r一同使用,以互動式模式移除指定任務
-u user: 僅root可運行,指定用戶管理cron任務
crontab –e –u mage
(2)例子1:普通用戶liyi 每分鍾廣播一次hello
切換到liyi 用戶下 su – liyi
切換到root用戶下,exit,進入/var/spool/cron/ ,可以看到guan用戶創建的任務,當然root用戶可以修改和刪除普通用戶的計劃任務。
4.控制用戶執行計劃任務
控制用戶執行計劃任務: /etc/cron.{allow,deny}
白名單: /etc/cron.allow 默認不存在,只有該文件中的用戶才能執行crontab命令
黑名單:/etc/cron.deny 默認存在,拒絕該文件中用戶執行crontab命令, 而沒有在cron.deny 文件中的使用者則可執行
如果兩個文件都不存在,只有root 可以執行 crontab 命令
解釋:先看/etc/cron.allow文件,如果有,則只看/etc/cron.allow文件,只有/etc/cron.allow中的用戶才能執行,如果沒有該文件,則查看/etc/cron.deny文件。除/etc/cron.deny中的用戶之外的用戶都可以創建cron任務,如果兩個文件都不存在,則僅root可以創建cron任務。
⑵ Centos7 利用crontab定時執行任務及配置方法
crond是什麼?
crond 和crontab是不可分割的。crontab是一個命令,常見於Unix和類Unix的操作系統之中,用於設置周期性被執行的指令。該命令從標准輸入設咐歲野備讀取衡喊指令,並將其存放於「crontab」文件中,以供之後讀取和執行。該詞來源於希臘語chronos(χρόνος),原意是時間。
而crond正是它的守護進程。cron服務是一個定時執行的服務,可以通過crontab 命令添加或者編輯需要定時執行的任務。
linux定時任務分為兩種
1)系統自身輪訓的任務,比如定時(5天或者一周)備份/var/log/message等日誌文件(系統的定時任務一般分為七段或者八段(centos6以下),以空格分割)
系統輪訓的配置文件/etc/logrotate.conf (centos7以下的在/etc/cron.daily/logrotate/logrotate.conf )
2)用戶執行的定時任務(用戶的定時任務一般分為六段)
at適合執行一次就結束的調度任務
anacrontab適合於非7*24小時開機的伺服器准備的,是以天為單位執行的,不能指定以分鍾的定時任務,在停機期間沒有任務執行,可以開機時執行。
cron服務是Linux的內置服務,但它不會開機自動啟動,可以每分鍾執行任務。可以用以下命令啟動和停止服務:
以上1-5行分別雀悄為啟動、停止、重啟服務和重新載入配置、查看服務狀態
把cron設為在開機的時候自動啟動
crontab操作
基本格式
基本使用
⑶ 記錄一次Centos伺服器tmp目錄滿的問題排查處理....
早上美編組突然反應賬號登錄不上,個別文件上傳不上,本人非專業的伺服器運維人員,第一反應是伺服器磁碟空間滿了,立即上去排查一圈,發現磁碟尚有剩餘空間,所以進一步排查問題,現在講相關過程記錄下來備用。
問題發現:相關應用不能正常使用,系統有明顯報錯提示(如下):
....bash: cannot create temp fileforhere-document: No space leftondevice...
有過初步的運維知識,並經過度媽顯示 這種情況應該是伺服器tmp目錄被占滿的提示,因此開始排除問題:
一、查看伺服器磁碟空間情況:
df -hl 命令顯示 / 根目錄40%空間已使用,尚有60%的空間未被使用,所以磁碟空間占滿的情況給排除了(如果出現佔用100%的問題,請自行度媽找解決問題辦法,不在本篇討論的范圍之內;)
二、 找出問題原因所在並排除 (重點)
因為本人非專業的運維人員,所以並不知道接下來該怎麼辦(大佬可以無視),經過一番搜索及請教,得到一種提示: LINUX伺服器也會因為小文件太多造成inode索引使用完,而報以上錯誤.... ; 隨即開始確認問題;
1、執行命令 df -i 得到如下圖:
看到了 100%,感興趣的人自行去網路,大致意思是LINUX寫文件需要兩個條件:01:磁碟有空間(文件大小佔用容量);02:inode(類似於編號)之類的東東(存放文件數量),哪個有問題都會提示寫入不了文件;病因找到,開始處理。
2、因為tmp目錄一般在系統 / 根目錄下,隨即 cd / ,切換至系統根目錄下執行如下命令
for i in /*; doecho$i;find$i| wc -l; done
大致意思是從 / 根目錄開始逐級排查目錄下文件的數量多少,一般會得到如下的圖示;
經過層層定位,本人定位到如下目錄:/var/spool/postfix/maildrop ,顯示文件數量 200多萬個,著實是有點大,封頂多少我也不知道,接下來就是刪除文件了唄,執行如下命令:
ls | xargs rm -rf;
經過約10分鍾左右的等待,命令執行完畢,通知美編組測試,一切恢復正常,特撰文記錄。
三、為什麼會出現這種情況,後續處理
/var/spool/postfix/maildrop 這個目錄好像是存放了類似於cron執行後郵件通知的內容信息文件,繼續上網查資料,發現是crontab 每次執行任務後會發送郵件,接受者是在他的配置文件 「/etc/crontab」 通過 MAILTO=root』 來設置的,默認是root,如果執行輸出沒有十分必要要用郵件發送的話,可以修改此處。
隨修改如下:
執行命令 vi /etc/crontab;
將『MAILTO=root』替換成『MAILTO="",然後service crond restart即可。
===================================與本篇內容無關==================================
使用命令 -h –max-depth=1 /* 查看/ 根路徑下文件的大小
-sh /* 查看哪個目錄最大,一步一步的查找大文件
使用 -h --max-depth=1查找最大的文件
⑷ CentOS 中 crontab 定時任務找不到命令問題
在 Linux 中配橘,經常會使用定時任務,培戚團定時執行指定的腳本或二進製程序文件。但是發現有時候 crontab 在執行的時仔碼候,總是提示找不到命令。但是手動執行的時候,卻沒有該問題。
crontab 定時任務的執行日誌,可以在 /var/log/ 目錄中找到。
出現上面的問題,其實就是環境變數不一樣的問題。crontab 執行時的環境變數與手動執行時的環境變數不一樣。
使用一個腳本包裝環境變數,同時在該腳本內調用要執行的二進製程序文件。
定義 runBinaryFile.sh 文件,用於包裝環境變數。
定時執行的時候,就執行 runBinaryFile.sh 腳本文件即可 。
⑸ CentOS7開機自動執行命令
1.在/etc/profile內添加執行命令
2.添加crontab定時任務
3.在/etc/rc.local內添加執行命令。
場景:開機以普通用戶身份執行腳本
針對以上場景可以用到 「su」 命令
注意:默認/etc/rc.local沒有執行許可權,需要手動添加一個執行許可權 chmod +x /etc/rc.d/rc.local。
至於為什麼不用其他兩種方法,大家可以自行了解一下
⑹ 關於linux CentOS系統定時自動重啟
1、查看定時執行的文件:命令:「crontab -l」,如同ll或者ls一樣,顯示定時任務列表信息。
⑺ crontab 命令介紹怎麼用
任務調度的crond常駐命令
crond 是linux用來定期執行程序的命令。當安裝完成操作系統之後,默認便會啟動此任務調度命令。crond命令每分鍾會定期檢查是否有要執行的工作,如果有要執行的工作便會自動執行該工作。而linux任務調度的工作主要分為以下兩類:
1、系統執行的工作:系統周期性所要執行的工作,如備份系統數據、清理緩存
2、個人執行的工作:某個用戶定期要做的工作,例如每隔10分鍾檢查郵件伺服器是否有新信,這些工作可由每個用戶自行設置
Crontab是UNIX系統下的定時任務觸發器,其使用者的許可權記載在下列兩個文件中:
文件
含義
/etc/cron.deny
該文件中所列的用戶不允許使用Crontab命令
/etc/cron.allow
該文件中所列的用戶允許使用Crontab命令
/var/spool/cron/
是所有用戶的crontab文件
/var/spool/cron/crontabs
/var/spool/cron/crontabs
Crontab命令的格式為:crontab –l|-r|-e|-i [username],其參數含義如表一:
參數名稱
含義
示例
-l
顯示用戶的Crontab文件的內容
crontabl –l
-i
刪除用戶的Crontab文件前給提示
crontabl -ri
-r
從Crontab目錄中刪除用戶的Crontab文件
crontabl -r
-e
編輯用戶的Crontab文件
crontabl -e
用戶所建立的Crontab文件存於/var/spool/cron中,其文件名與用戶名一致。
它的格式共分為六段,前五段為時間設定段,第六段為所要執行的命令段,
格式如下:* * * * *
其時間段的含義如表二:
段
含義
取值范圍
第一段
代表分鍾
0—59
第二段
代表小時
0—23
第三段
代表日期
1—31
第四段
代表月份
1—12
第五段
代表星期幾,0代表星期日
0—6
例:如果用戶的Crontab文件的內容是:29 19 * * * echo its dinner time,則系統每天的19:29顯示『its dinner time』
示例(創建一個cron全過程,每分鍾都會在test.txt里輸入當前時間):
1. 以普通用戶登錄linux系統(我用的是CentOS4.1)
2. $crontab –e
說明:系統默認的編輯器是VIM,如果不是請加上以下shell:
$EDITOR=vi
$export EDITOR
3. 輸入」*/1 * * * * date >> $HOME/test.txt」,save and exit VIM
4. $su root
5. $cd /etc/init.d
6. ./crond restart
下面看看看幾個具體的例子:
● 0 */2 * * * /sbin/service httpd restart 意思是每兩個小時重啟一次apache
● 50 7 * * * /sbin/service sshd start 意思是每天7:50開啟ssh服務
● 50 22 * * * /sbin/service sshd stop 意思是每天22:50關閉ssh服務
● 0 0 1,15 * * fsck /home 每月1號和15號檢查/home 磁碟
● 1 * * * * /home/bruce/backup 每小時的第一分執行 /home/bruce/backup這個文件
● 00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} /; 每周一至周五3點鍾,在目錄/home中,查找文件名為*.xxx的文件,並刪除4天前的文件。
● 30 6 */10 * * ls 意思是每月的1、11、21、31日是的6:30執行一次ls命令
參數 :
crontab -e : 執行文字編輯器來設定時程表,內定的文字編輯器是 VI,如果你想用別的文字編輯器,則請先設定 VISUAL 環境變數來指定使用那個文字編輯器(比如說 setenv VISUAL joe)
crontab -r : 刪除目前的時程表
crontab -l : 列出目前的時程表
crontab file [-u user]-用指定的文件替代目前的crontab。
時程表的格式如下 :
f1 f2 f3 f4 f5 program
其中 f1 是表示分鍾,f2 表示小時,f3 表示一個月份中的第幾日,f4 表示月份,f5 表示一個星期中的第幾天。program 表示要執行的程序。
當 f1 為 * 時表示每分鍾都要執行 program,f2 為 * 時表示每小時都要執行程序,其餘類推
當 f1 為 a-b 時表示從第 a 分鍾到第 b 分鍾這段時間內要執行,f2 為 a-b 時表示從第 a 到第 b 小時都要執行,其餘類推
當 f1 為 */n 時表示每 n 分鍾個時間間隔執行一次,f2 為 */n 表示每 n 小時個時間間隔執行一次,其餘類推
當 f1 為 a, b, c,... 時表示第 a, b, c,... 分鍾要執行,f2 為 a, b, c,... 時表示第 a, b, c...個小時要執行,其餘類推
使用者也可以將所有的設定先存放在檔案 file 中,用 crontab file 的方式來設定時程表。
crontab執行java程序的問題:
一 crontab使用注意:
crontab -l查看該用戶的crontab配置,crontab -e編輯該用戶的crontab配置配置一般在末尾加上 2>&1表示錯誤輸出(2)和標准輸出(1)一樣輸出到同一個由前面>>指定的地方
如 15 14 * * * /sys_back/monitor.sh >>/sys_back/log/monitor.log 2>&1
表示每天14:15執行monitor.sh腳本,錯誤和標准輸出都寫入monitor.log文件
涉及到文件名時最好寫絕對路徑
二 問題及解決
shell腳本有echo語句,有java -jar執行java程序。直接執行腳本時,一切順利,但是放到crontab中執行時,echo語句正常,java程序卻沒有執行。
1 網上查找,覺得應該是環境變數的問題。說是要將java環境變數加入到shell腳本中,按照
這個方法做,發現問題依然存在。百思不得其解。
2 經轉換角度,看java程序是否有問題。在java語句中直接加入列印語句,發現其在crontab日誌中
居然可以顯示。終於確定是java程序的問題。java程序功能很簡單,就是一個語句java -Dosgi.console -Dosgi.configuration.area=./configuration -jar equinox.jar -console用來啟動osgi框架。
於是在shell腳本中不調用java程序,直接改為程序中的這一句,問題解決。
但是又引發新的問題:直接java -jar會源源不斷的輸出osgi>到日誌文件,導致日誌文件越來越大。
不可行。再想辦法解決。
3 感覺還是相對路徑的問題。嘗試在crontab調用的腳本中用相對路徑向一個文件輸出一句話,發現失敗。(單獨執行腳本沒問題)既然如此,是不是java程序中也不能用相對路徑呢。遂將./configuration及equinox.jar都用絕對路徑,再調試,終於成功,至此問題解決。但始終感覺在程序中用絕對路徑很不方便維護。
三 附加問題及解決
此腳本的作用就是判斷osgi程序是否在運行,如果不運行則啟動。
實現思路是ps -elf得到進程id及狀態,如果id不存在,則啟動,如果id存在但狀態不是運行中(solaris為O,AIX為A),則殺掉原進程重新啟動。
發現程序在運行幾天後會自動停掉,以為是java程序有問題,然而卻始終找不到問題在哪裡。在解決上面問題時,卻意外的發現可能不是java程序的問題。man ps時發現,solaris中,進程狀態除了O,還有S(sleeping) R(Runnable) Z(Zombie僵屍進程)T(stopped),只有後兩種狀態下進程才是有問題的,所以很可能是crontab執行腳本時,程序狀態非O就被殺掉,重啟時卻因為上面的問題沒成功。於是修改腳本,狀態是後兩種時才重啟。這個問題也解決了。
我也是網上轉的,望採納
⑻ Linux下定時任務(系統任務調度、用戶任務調度)crontab使用詳解
crond是Linux下用來周期性的執行某種任務或等待處理某些事件的一個守護進程,與windows下的計劃任務類似,在CentOS Linux release 7.2.1511中默認是開機啟動的,大家可以使用命令:systemctl status crond進行查看。 crond進程定期(每分鍾)檢查是否有要執行的任務,如果有要執行的任務,則自動執行該任務。用戶在cron表
(也被稱為crontab文件)指定了定時任務,crontab也就是我們常見的定時任務設置命令。Linux下的任務調度分為兩類,系統任務調度和用戶任務調度。
系統任務調度 :系統周期性所要執行的工作,比如寫緩存數據到硬碟、日誌清理等。/etc/crontab文件就是系統任務調度的配置文件。
用戶任務調度 :用戶定期要執行的工作,比如用戶數據備份、定時郵件提醒等。用戶可以使用 crontab 工具來定製自己的計劃任務。所有用戶定義的crontab文件都被保存在/var/spool/cron目錄中。其文件名與用戶名一致,使用者許可權文件如下:
通過以上幫助信息,我們可以知道crond是執行任務計劃的一個守護進程。在使用crontab之前我們可以根據幫助信息來設置相關選項,一般情況下我們都使用默認值。
1.建立演示賬號crontab。
2.星號(*)使用舉例。
以上例子中完整演示了crontab從建立到執行的過程。「5 0 * * * echo "GeekDevOps"」表示在每天00:05執行命令:echo "GeekDevOps"。後面的星號表示只要前面條件滿足都執行。例子中的-u選項指定了用戶:crontab,-l選項列舉了相關用戶的用戶任務調度,不指定用戶則默認為root。執行結果默認寫入到用戶mail目錄下的相關文件中。
3.逗號(,)的使用舉例。
現在我們已經把用戶切換到crontab下,因此無需額外指定-u選項相關內容。「3 2,6,8 * * *」表示每天的02:03:00、06:03:00、08:03:00分別執行一次命令:ls /usr/local。
4.減號(-)的使用舉例。
例子中的「0 2-6 * * 6 df -h /」表示用戶crontab在每周六的02:00、03:00、04:00、05:00、06:00執行命令:df -h / 。
5.斜杠(/)的使用舉例。
例子中表示每隔2分鍾執行一次命令:echo "GeekDevOps">>/root/GeekDevOps.txt。
6.crontab的使用非常簡單,很容易理解,只要在取值范圍內設置執行的值基本是沒有問題的。現在我們要刪除已經設置的這些定時任務。
例子中,選項-r表示刪除所有定時任務。選項-i表示在刪除前進行再次確定,輸入y或者Y才能真正刪除。
7.備份我們設置的用戶任務調度配置文件。
8.系統任務調度的使用舉例。
系統任務調度與用戶任務調度不一樣,需要直接在/etc/crontab裡面配置,如果需要指定用戶,還需要在執行命令前指定用戶名。通過crontab -l 命令是查看不到系統任務調度任務的。