A. Kali-linux 定時執行任務Crontab的簡單設置
1.修改crontab文件添加或修改定時任務
直接編輯文件:nano /etc/crontab
或使用crontab命令:crontab -e
2.語法介紹:
裡面已經有一些test示例,照著添加或修改就行,這里做點簡單介紹:
time user command
分 時 天 月 星期 用戶 命令
minute hour day month dayofweek user command
A. 時間 time:
minute: 分鍾,從 0 到 59 之間的任何整數
hour: 小時,從 0 到 23 之間的任何整數
day: 日期,從 1 到 31 之間的任何整數(如果指定了月份,必須是該月份的有效日期)
month: 月份,從 1 到 12 之間的任何整數(或使用月份的英文簡寫如 jan、feb 等等)
dayofweek: 星期,從 0 到 7 之間的任何整數,這里的 0 或 7 代表星期日(或使用星期的英文簡寫如 sun、mon 等等)
command: 要執行的命令(command是linux終端可以直接執行的命令。)
這里一些符號可以表示以上特殊數值:
*表示所有有效值
-表示範圍, 比如1-4(從1到4)
,表示散數數值, 比如1,2,4,7...
/表示每隔,比如 */19 (每隔19 )
看一些簡單的例子,以下是我自己的一個crontab文件:
root@mtx:~#crontab -l
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow usercommand
#17 ** * *root cd / && run-parts --report /etc/cron.hourly#每小時的17分
#25 6* * *roottest -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )#每天6點25分
#47 6* * 7roottest -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )#每年7月份里每一天的6點47分
#52 61 * *roottest -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )#每個月1號的6點52分
*/4 * * * * root /home/Tool/httpslow/httpslow.sh 每4分鍾
#
B. 命令 command
命令command直接是linux終端可以執行的命令或可執行腳本的絕對位置
3.使用方法:
crontab crontab_file (-u user)#如crontab /etc/crontab -u root (root用戶執行默認配置文件)
crontab -l#查看當前正在運行的crontab服務
crontab -r#刪除用戶crontab配置文件
crontab -i#刪除前給出提示
crontab -h#查看幫助
/etc/init.d/cron start/stop/restart/reload#啟動/停止/重啟/重新載入 crontab服務
簡單的臨時重復命令完全可以有其他方案代替:
while true;do clear && echo '您的ip地址是:' && wget -qo- ifconfig.me/ip;sleep 120;done
#每2分鍾刷新一次外網ip地址,並列印出來」
watch -n 5 netstat -nus#顯示網路流量,每5秒刷新一次
。。。
B. linux crontab 定時 清除 文件和目錄
rm 加上參數 -rf
C. linux crontab 定時 清除 文件和目錄
00 22 * * * /usr/bin/find /backupmongo/ -mtime +7 -exec rm -rf {} \;
D. linux下編寫定時任務crontab
linux下的crontab服務:
1、crontab 是用來讓使用者在固定時間或固定間隔執行程序之用
在linux平台上如果需要實現任務調度功能可以編寫cron腳本來實現。
以某一頻率執行任務
linux預設會啟動crond進程,crond進程不需要用戶啟動、關閉。
crond進程負責讀取調度任務並執行,用戶只需要將相應的調度腳本寫入cron的調度配置文件中。
cron的調度文件有以下幾個:
1. crontab
2. cron.d
3. cron.daily
4. cron.hourly
5. cron.monthly
6. cron.weekly
如果用的任務不是以hourly monthly weekly方式執行,則可以將相應的crontab寫入到crontab 或cron.d目錄中。
示例:
每隔一分鍾執行一次腳本 /opt/bin/test-cron.sh
可以在cron.d新建腳本 echo-date.sh
內容為
*/1 * * * * root /opt/bin/test-cron.sh
2、cron是一個linux下的定時執行工具,可以在無需人工干預的情況下運行作業。由於Cron 是Linux的內置服務,如果它不自動起來,可以用以下的方法啟動、關閉這個服務:
/sbin/service crond start //啟動服務
/sbin/service crond stop //關閉服務
/sbin/service crond restart //重啟服務
/sbin/service crond reload //重新載入配置
你也可以將這個服務在系統啟動的時候自動啟動:
在/etc/rc.d/rc.local這個腳本的末尾加上:
/sbin/service crond start
現在Cron這個服務已經在進程裡面了,我們就可以用這個服務了
查看服務是否已經運行用 ps -ax | grep cron
3、crontab命令
查看該用戶下的crontab服務是否創建成功, 用 crontab -l 命令
命令 which php 查看linux下安裝的php的路徑
cron服務提供crontab命令來設定cron服務的,以下是這個命令的一些參數與說明:
crontab -u //設定某個用戶的cron服務,一般root用戶在執行這個命令的時候需要此參數
crontab -l //列出某個用戶cron服務的詳細內容
crontab -r //刪除沒個用戶的cron服務
crontab -e //編輯某個用戶的cron服務
比如說root查看自己的cron設置:crontab -u root -l
再例如,root想刪除fred的cron設置:crontab -u fred -r
在編輯cron服務時,編輯的內容有一些格式和約定,輸入:crontab -u root -e
進入vi編輯模式,編輯的內容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt
任務調度的crond常駐命令crond 是linux用來定期執行程序的命令。當安裝完成操作系統之後,默認便會啟動此 任務調度命令。crond命令每分鍾會定期檢查是否有要執行的工作,如果有要執行的工作便會自動執行該工作。
crontab命令選項:
-u指定一個用戶
-l列出某個用戶的任務計劃
-r刪除某個用戶的任務
-e編輯某個用戶的任務
4、cron文件語法:
分 小時 日 月 星期 命令
0-59 0-23 1-31 1-12 0-6 command (取值范圍,0表示周日一般一行對應一個任務)
5、 新增調度任務
新增調度任務可用兩種方法:
1)、在命令行輸入: crontab -e 然後添加相應的任務,wq存檔退出。
2)、直接編輯/etc/crontab 文件,即vi /etc/crontab,添加相應的任務。
6、 查看調度任務
crontab -l //列出當前的所有調度任務
crontab -l -u jp //列出用戶jp的所有調度任務
7、 刪除任務調度工作
crontab -r //刪除所有任務調度工作
8、 任務調度執行結果的轉向
例1:每天5:30執行ls命令,並把結果輸出到/jp/test文件中
30 5 * * * ls >/jp/test 2>&1
註:2>&1 表示執行結果及錯誤信息。
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root //如果出現錯誤,或者有數據輸出,數據作為郵件發給這個帳號
HOME=/ //使用者運行的路徑,這里是根目錄
# run-parts
01 * * * * root run-parts /etc/cron.hourly //每小時執行/etc/cron.hourly內的腳本
02 4 * * * root run-parts /etc/cron.daily //每天執行/etc/cron.daily內的腳本
22 4 * * 0 root run-parts /etc/cron.weekly //每星期執行 /etc/cron.weekly內的腳本
42 4 1 * * root run-parts /etc/cron.monthly //每月去執行/etc/cron.monthly內的腳本
大家注意」run-parts」這個參數了,如果去掉這個參數的話,後面就可以寫::要運行的某個腳本名,而不是文件夾名了。
總結:
編寫定時任務的兩種方式:1.sudo vim /etc/crontab 2. sudo crontab -e
查看定時任務的兩種方式:1.sudo cat /etc/crontab 2.sudo crontab -l
*/1 * * * * appuser cd /app/webserver/website/api-cb.chuchujie.com/master/current/script/ && ./back_coupon.sh 2 10 >> /dev/null 2>&1
查看定時任務是否運行:
sudo tail -f /var/log/cron //定時任務日誌(查看剛才設置的任務是否執行)
註:腳本有可執行許可權
sh a.sh(不需要執行許可權)
./sh (需要執行許可權)
1.當shell腳本具有可執行許可權時,用sh filename與./filename執行腳本是沒有區別的。./filename是因為當前目錄沒有在PATH中,所有"."是用來表示當前目錄的。
E. 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 命令是查看不到系統任務調度任務的。
F. Linux日誌管理神器之Logrotate日誌分割,以及crontab定時輪詢
有些服務,會自動產生大量的日誌文件,如果不限制,會佔用磁碟空間。
如果單純的用定時任務crontab刪除,又不太靈活,這時需要日誌神器logrotate。
logrotate工具是系統自帶為了方便進行日誌管理而產生的一個工具。
系統會定時運行 logrotate,一般是每天一次。也是基於定時任務crontab運行的。
配置文件:
主配置文件的位置在 /etc/logrotate.conf,一般配置在 /etc/logrotate.d/子目錄下。
如系統默認日誌配置:
配置文件參數:
更多信息請參考man logrotate幫助文檔
模板是通用的,而配置參數則根據你的需求進行調整,不是所有的參數都是必要的。
在上面的配置文件中,我們只想要輪詢一個日誌文件,size=50M 指定日誌文件大小可以增長到 50MB,dateext 指 示讓舊日誌文件以創建日期命名。
可自行參考/etc/logrotate.d/目錄下系統默認的文件。
logrotate命令:
具體 logrotate 命令格式如下:
要為某個特定的配置調用 logrotate:
排障過程中的最佳選擇是使用-d選項以預演方式運行 logrotate。要進行驗證,不用實際輪循任何日誌文件, 可以模擬演練日誌輪循並顯示其輸出。
正如我們從上面的輸出結果可以看到的,logrotate 判斷該輪循是不必要的。如果文件的時間小於一天,就會發生了。
強制輪循即使輪循條件沒有滿足,我們也可以通過使用-f選項來強制 logrotate 輪循日誌文件,-v參數提供了詳細的輸出。
個人項目配置:
項目每天可產生20G左右的日誌,顯示不能做每日輪詢,所以額外需要添加定時任務做每小時,或者每隔多少分鍾。
如果輪詢日誌異常報錯如下:
error: skipping 「」 because parent directory has insecure permissions (It』s world writable or writable by group which is not 「root」) Set 「su」 directive in config file to tell logrotate which user/group should be used for rotation.」
需要加 su root root 選項。
同時添加定時任務:
定時任務說明:
第一條,每隔40分鍾輪詢執行一次logrotate任務。
第二條,每天凌晨4點刪除前一天的日誌,原因如下:
由於項目系統產生日誌格式的原因,會導致以下情況:
如果昨天的分割到4個後(或者1,2,3),時間到第二天後,沒法轉儲遞增,會一直停留在4,沒法刪除,每天會有,久而久之,也會佔用磁碟空間。所以需要定時刪除。
設置完成
開啟定時任務日誌,以便查看定時任務是否執行。後續可取消。
重啟rsyslog
G. Linux crontab怎麼定時執行任務
linux下定時執行任務的方法 【非原創,個人網上收集整理了一下】
在LINUX中,周期執行的任務一般由cron這個守護進程來處理[ps -ef|grep cron]。cron讀取一個或多個配置文件,這些配置文件中包含了命令行及其調用時間。
cron的配置文件稱為「crontab」,是「cron table」的簡寫。
一、cron在3個地方查找配置文件:
1、/var/spool/cron/ 這個目錄下存放的是每個用戶包括root的crontab任務,每個任務以創建者的名字命名,比如tom建的crontab任務對應的文件就是/var/spool/cron/tom。
一般一個用戶最多隻有一個crontab文件。
二、/etc/crontab 這個文件負責安排由系統管理員制定的維護系統以及其他任務的crontab。
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# .---------------- 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
三、/etc/cron.d/ 這個目錄用來存放任何要執行的crontab文件或腳本。
四、許可權
crontab許可權問題到/var/adm/cron/下一看,文件cron.allow和cron.deny是否存在
用法如下:
1、如果兩個文件都不存在,則只有root用戶才能使用crontab命令。
2、如果cron.allow存在但cron.deny不存在,則只有列在cron.allow文件里的用戶才能使用crontab命令,如果root用戶也不在裡面,則root用戶也不能使用crontab。
3、如果cron.allow不存在, cron.deny存在,則只有列在cron.deny文件裡面的用戶不能使用crontab命令,其它用戶都能使用。
4、如果兩個文件都存在,則列在cron.allow文件中而且沒有列在cron.deny中的用戶可以使用crontab,如果兩個文件中都有同一個用戶,
以cron.allow文件裡面是否有該用戶為准,如果cron.allow中有該用戶,則可以使用crontab命令。
AIX 中 普通用戶默認都有 crontab 許可權,如果要限制用戶使用 crontab ,就需要編輯/var/adm/cron/cron.deny
HP-UNIX 中默認普通用戶沒得crontab 許可權 ,要想放開普通用戶的crontab 許可權可以編
五、創建cron腳本
第一步:寫cron腳本文件,命名為crontest.cron。
15,30,45,59 * * * * echo "xgmtest....." >> xgmtest.txt 表示,每隔15分鍾,執行列印一次命令
第二步:添加定時任務。執行命令 「crontab crontest.cron」。搞定
第三步:"crontab -l" 查看定時任務是否成功或者檢測/var/spool/cron下是否生成對應cron腳本
六、cron服務
cron是一個linux下 的定時執行工具,可以在無需人工干預的情況下運行作業。
/sbin/service crond start //啟動服務
/sbin/service crond stop //關閉服務
/sbin/service crond restart //重啟服務
/sbin/service crond reload //重新載入配置
/sbin/service crond status //查看服務狀態
crontab用法
crontab命令用於安裝、刪除或者列出用於驅動cron後台進程的表格。用戶把需要執行的命令序列放到crontab文件中以獲得執行。
每個用戶都可以有自己的crontab文件。/var/spool/cron下的crontab文件不可以直接創建或者直接修改。該crontab文件是通過crontab命令創建的
在crontab文件中如何輸入需要執行的命令和時間。該文件中每行都包括六個域,其中前五個域是指定命令被執行的時間,最後一個域是要被執行的命令。
每個域之間使用空格或者製表符分隔。格式如下:
minute hour day-of-month month-of-year day-of-week commands
合法值 00-59 00-23 01-31 01-12 0-6 (0 is sunday)
除了數字還有幾個個特殊的符號就是"*"、"/"和"-"、",",*代表所有的取值范圍內的數字,"/"代表每的意思,"/5"表示每5個單位,"-"代表從某個數字到某個數字,","分開幾個離散的數字。
-l 在標准輸出上顯示當前的crontab。
-r 刪除當前的crontab文件。
-e 使用VISUAL或者EDITOR環境變數所指的編輯器編輯當前的crontab文件。當結束編輯離開時,編輯後的文件將自動安裝。
幾個例子:
每天早上6點
0 6 * * * echo "Good morning." >> /tmp/test.txt //注意單純echo,從屏幕上看不到任何輸出,因為cron把任何輸出都email到root的信箱了。
每兩個小時
0 */2 * * * echo "Have a break now." >> /tmp/test.txt
晚上11點到早上8點之間每兩個小時和早上八點
0 23-7/2,8 * * * echo "Have a good dream" >> /tmp/test.txt
每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點
0 11 4 * 1-3 command line
1月1日早上4點
0 4 1 1 * command line SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root //如果出現錯誤,或者有數據輸出,數據作為郵件發給這個帳號 HOME=/
每小時執行/etc/cron.hourly內的腳本
01 * * * * root run-parts /etc/cron.hourly
每天執行/etc/cron.daily內的腳本
02 4 * * * root run-parts /etc/cron.daily
每星期執行/etc/cron.weekly內的腳本
22 4 * * 0 root run-parts /etc/cron.weekly
每月去執行/etc/cron.monthly內的腳本
42 4 1 * * root run-parts /etc/cron.monthly
注意: "run-parts"這個參數了,如果去掉這個參數的話,後面就可以寫要運行的某個腳本名,而不是文件夾名。
每天的下午4點、5點、6點的5 min、15 min、25 min、35 min、45 min、55 min時執行命令。
5,15,25,35,45,55 16,17,18 * * * command
每周一,三,五的下午3:00系統進入維護狀態,重新啟動系統。
00 15 * * 1,3,5 shutdown -r +5
每小時的10分,40分執行用戶目錄下的innd/bbslin這個指令:
10,40 * * * * innd/bbslink
每小時的1分執行用戶目錄下的bin/account這個指令:
1 * * * * bin/account
每天早晨三點二十分執行用戶目錄下如下所示的兩個指令(每個指令以;分隔):
20 3 * * * (/bin/rm -f expire.ls logins.bad;bin/expire$#@62;expire.1st)
每年的一月和四月,4號到9號的3點12分和3點55分執行/bin/rm -f expire.1st這個指令,並把結果添加在mm.txt這個文件之後(mm.txt文件位於用戶自己的目錄位置)。
12,55 3 4-9 1,4 * /bin/rm -f expire.1st$#@62;$#@62;mm.txt
at命令實現定時任務
假如我們只是想要讓特定任務運行一次,那麼,這時候就要用到at監控程序了。
at類似列印進程,會把任務放到/var/spool/at目錄中,到指定時間運行它 。at命令相當於另一個shell,運行at time命令時,它發送一個個命令,可以輸入任意命令或者程序。
at命令執行流程如下
# at 2:05 tomorrow
at>/home/kyle/do_job
at> Ctrl+D
AT Time中的時間表示方法
-----------------------------------------------------------------------
時 間 例子 說明
-----------------------------------------------------------------------
Minute at now + 5 minutes 任務在5分鍾後運行
Hour at now + 1 hour 任務在1小時後運行
Days at now + 3 days 任務在3天後運行
Weeks at now + 2 weeks 任務在兩周後運行
Fixed at midnight 任務在午夜運行
Fixed at 10:30pm 任務在晚上10點30分
注意:linux默認為不啟動,而ubuntu默認為啟動的。檢查是否啟動,用service atd檢查語法,用service atd status檢查atd的狀態,用service atd start啟動atd服務。
查看at執行的具體內容:一般位於/var/spool/at目錄下面, 用vi打開,在最後一部分就是你的執行程序
參數詳解
-V : 印出版本編號
-q : 使用指定的佇列(Queue)來儲存,at 的資料是存放在所謂的 queue 中,使用者可以同時使用多個 queue,而 queue 的編號為 a, b, c... z 以及 A, B, ... Z 共 52 個
-m : 即使程序/指令執行完成後沒有輸出結果, 也要寄封信給使用者
-f file : 讀入預先寫好的命令檔。使用者不一定要使用交談模式來輸入,可以先將所有的指定先寫入檔案後再一次讀入
網路應用
-l : 列出所有的指定 (使用者也可以直接使用 atq 而不用 at -l)
-d : 刪除指定 (使用者也可以直接使用 atrm 而不用 at -d)
-v : 列出所有已經完成但尚未刪除的指定
刪除任務
atrm 2
三天後的下午 5 點鍾執行 /bin/ls :
at 5pm 3 days /bin/ls
三個星期後的下午 5 點鍾執行 /bin/ls :
at 5pm 2 weeks /bin/ls
明天的 17:20 執行 /bin/date :
at 17:20 tomorrow /bin/date
1999 年的最後一天的最後一分鍾印出 the end of world !
at 23:59 12/31/1999 echo the end of world !
頂2踩0
H. linux定時執行任務後怎麼取消
crontab -e
去刪除掉
或者/etc/crontab里刪掉
看你的計劃任務寫在哪
I. linux 定時刪除n天前的文件crontab
先算數量,判斷後再刪
filenum=`find . -name "log.*" -mtime +10 | wc -l`
if [ $filenum -gt 10 ] ; then
filenum=`find . -name "log.*" -mtime +10 -exec rm -f {} \;
fi
J. 寫一個linux shell每天晚上12點刪除文件怎麼寫
編輯cron服務
0 0 * * * rm -f /usr/local/test/catalina.out
參考下 http://blog.csdn.net/flyhawk007blog/article/details/2689678
首先#crontab -u root -e 進入vi編輯模式
然後你按 i
然後粘貼 0 0 * * * rm -f /usr/local/test/catalina.out
然後按 : 然後按 wq
然後啟動crontab服務 #service crond start