Linux定時任務調用sh文件


1.編寫sh文件
  創建:vi test.sh
  寫入:date >> /xiaol/data.txt

2.默認創建的這個sh問件是沒有執行權限的,修改權限
  chmod 777 test.sh

3.設置crontab定時任務
  打開定時任務配置文件:crontab -e
  定時調用test.sh:* * * * * /sambashare/test.sh

4.保存退出

5.如果有錯,Linux會在執行的時候發送一份郵件給你
  cat /var/spool/mail/root

備注:
  定時任務需要crond服務的支持
    1.啟動方法  service crond restart
    2.該服務默認是開機啟動的
  取消定時任務
    1.全部取消 crontab -r
    2.取消某個 crontab -e 配置文件,刪除要取消的哪一行配置
  查看目前都有那些定時任務
    crontab -l

第一個*        一小時當中的第幾分鍾      0-59
第二個*        一天當中的第幾小時          0-23
第三個*        一個月當中的第幾天          1-31
第四個*        一年當中的第幾月              1-12
第五個*        一周當中的星期幾              0-7(0和7都代表周日)

*        代表任何時間,比如第一個 * 就代表一小時中的每分鍾都執行
,        代表不連續的時間,比如 0 8,12,16 * * * 代表每天8,12,16點0分執行
-        代表連續的時間范圍,比如0 5 * * 1-6 代表在周一到周六凌晨5點0分執行
*/n     代表每個多久執行一次,比如*/10 * * * *代表每隔10分鍾執行一次

例子:
45 22 * * *    
在22點45分執行

0 17 * * 1     
在每周1的17點0分執行

0 5 1,15 * *  
在每月1號和15號的凌晨5點0分執行

40 4 * * 1-5  
在每周一到周五的凌晨4點40分執行

*/10 4 * * *    
在每天的凌晨4點,每隔10分鍾執行一次

0 0 1,15 * 1  
每月1號和15號,每周1的0點0分都會執行
  注意:星期幾和幾號最好不要同時出現,他們的意義都是天,容易混淆

 

需要根據時間刪除這個目錄下的文件,/home/lifeccp/dicom/studies,清理掉20天之前的無效數據。

可以使用下面一條命令去完成:

?
1
find /home/lifeccp/dicom/studies -mtime +21 -name "*.*" - exec rm -Rf {} \;

這個是根據時間刪除。

下面簡要解釋一下,這句shell命令:

?
1
find /home/lifeccp/dicom/studies -mtime +21 -name "*.*" - exec rm -Rf {} \;
  • /home/lifeccp/dicom/studies :准備要進行清理的任意目錄
  • -mtime:標准語句寫法
  • +10:查找10天前的文件,這里用數字代表天數,+30表示查找30天前的文件
  • "*.*":希望查找的數據類型,"*.jpg"表示查找擴展名為jpg的所有文件,"*"表示查找所有文件
  • -exec:固定寫法
  • rm -rf:強制刪除文件,包括目錄
  •  {} \; :固定寫法,一對大括號+空格+/+;

 當然也可以根據文件名、根據大小,根據其他不同條件過濾刪除,或者修改等,可以考慮sort等命令結合使用。

 

find 對應目錄 -mtime +天數 -name “文件名” -exec rm -rf {} ;

例1:

find /usr/local/backups -mtime +10 -name “*.*” -exec rm -rf {} ;

將/usr/local/backups目錄下所有10天前帶”.”的文件刪除

find:Linux的查找命令,用戶查找指定條件的文件

/usr/local/backups:想要進行清理的任意目錄

-mtime:標准語句寫法

+10:查找10天前的文件,這里用數字代表天數,+30表示查找30天前的文件

“*.*”:希望查找的數據類型,”*.jpg”表示查找擴展名為jpg的所有文件,”*”表示查找所有文件,這個可以靈活運用,舉一反三

-exec:固定寫法

rm -rf:強制刪除文件,包括目錄

{} ; :固定寫法,一對大括號+空格++;

 

 

 

例2:

1.#touch /usr/local/bin/clear

#chmod 777 clear

新建一個可執行文件clear

2.vi clear

編輯clear文件如下:

#!/bin/sh

find /usr/local/backups -mtime +10 -name “*.*” -exec rm -rf {} ;

ok,保存退出3.#crontab -e

將clear文件加入到系統計划任務,到點自動執行

輸入:

* 2 * * */usr/local/bin/clear

這里的設置是每天凌晨2點執行clear文件進行數據清理,可以研究一下cron,制定自己需要的計划任務

示例:

#!/bin/sh

find /usr/local/jboss-4.2.3.GA/server/default/log -mtime +6 -name “server.log.*” -exec rm -rf {} ;

exit

[root@web3 ~]# crontab -l

 

 

 

編輯用戶的Crontab文件

crontabl -e

用戶所建立的Crontab文件存於/var/spool/cron中,其文件名與用戶名一致。它的格式共分為六段,前五段為時間設定段,第六段為所要執行的命令段,格式如下:* * * * *其時間段的含義如表二:

含義

取值范圍

第一段

代表分鍾

0—59

第二段

代表小時

0—23

第三段

代表日期

1—31

第四段

代表月份

1—12

第五段

代表星期幾,0代表星期日

0—6

名稱 : crontab使用權限 : 所有使用者使用方式 :crontab [ -u user ] filecrontab [ -u user ] { -l | -r | -e }說明 :crontab 是用來讓使用者在固定時間或固定間隔執行程序之用,換句話說,也就是類似使用者的時程表。-u user 是指設定指定 user 的時程表,這個前提是你必須要有其權限(比如說是 root)才能夠指定他人的時程表。如果不使用 -u user 的話,就是表示設定自己的時程表。餐數 :-e : 執行文字編輯器來設定時程表,內定的文字編輯器是 VI,如果你想用別的文字編輯器,則請先設定 VISUAL 環境變數來指定使用那個文字編輯器(比如說 setenv VISUAL joe)-r : 刪除目前的時程表-l : 列出目前的時程表時程表的格式如下 :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 的方式來設定時程表。例子 :每月每天每小時的第 0 分鍾執行一次 /bin/ls :0 7 * * * /bin/ls

在 12 月內, 每天的早上 6 點到 12 點中,每隔 20 分鍾執行一次 /usr/bin/backup :0 6-12/3 * 12 * /usr/bin/backup

周一到周五每天下午 5:00 寄一封信給 alex@domain.name :0 17 * * 1-5 mail -s “hi” alex@domain.name /dev/null 2>&1 即可例:如果用戶的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命令

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM