日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

Linux中的计划任务—Crontab调度重复执行的任务

發(fā)布時(shí)間:2025/3/21 linux 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux中的计划任务—Crontab调度重复执行的任务 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 目標(biāo)
  • 背景介紹
  • Crontab是什么
  • Crontab實(shí)踐
    • 安裝并檢查Crontab服務(wù)
      • 1、檢查cron服務(wù):
      • 2、安裝cron
    • 案例實(shí)現(xiàn)
    • Crontab的基本組成
    • Crontab的配置文件格式
      • 小栗子
        • eg1.每晚的21:30重啟apache
        • eg2.每月1,10,22日的4:45重啟apache
        • eg3.每月1-10日的4:45重啟apache
        • eg4.每隔兩分鐘重啟apache
        • eg5.每晚11-早上7點(diǎn)之間,每隔一個(gè)小時(shí)重啟apache
        • eg6.每天18:00-23:00之間每隔30分鐘重啟apache
    • Crontab工具的使用
      • 1、查看某用戶的計(jì)劃任務(wù)列表:
      • 2、修改某用戶的計(jì)劃任務(wù):
      • 3、刪除crontab文件
      • 4、查看生成的最終計(jì)劃任務(wù)文件:
      • 5、crontab日志位置:
    • Crontab的配置文件
    • Crontab的日志
  • Crontab的常見錯(cuò)誤
    • Crontab的常見錯(cuò)誤之環(huán)境變量
    • Crontab的常見錯(cuò)誤之命令行操作
    • Crontab的常見錯(cuò)誤之分鐘設(shè)置誤用
    • Crontab綜合案例解析
  • && 和|| 和 ;的區(qū)別
  • 定時(shí)備份oracle數(shù)據(jù)

目標(biāo)

本博文的主要目的是讓筆者和讀者可以了解并掌握以下內(nèi)容:
1、Crontab的基本概念
2、Crontab的基本組成
3、操作Crond服務(wù)
4、配置系統(tǒng)和用戶計(jì)劃任務(wù)
5、監(jiān)控計(jì)劃任務(wù)日志


背景介紹

在工作中你是否也碰到過這種定時(shí)重復(fù)的工作呢?

Crontab可以幫助你從這些定時(shí)重復(fù)的工作中解脫出來


Crontab是什么

  • 1.Crontab是一個(gè)用于設(shè)置周期性執(zhí)行任務(wù)的工具;
  • 2.周期性執(zhí)行的任務(wù)我們稱為Cron Job;
  • 3.周期性執(zhí)行的任務(wù)列表我們稱為Cron Table。

Crontab實(shí)踐

安裝并檢查Crontab服務(wù)

安裝并檢查crontab服務(wù)

1、檢查cron服務(wù):

– 檢查crontab工具是否安裝:crontab -l
– 檢查crond服務(wù)是否啟動(dòng):service crond status

2、安裝cron

– yum install vixie-cron
– yum install crontabs
注意:
1、檢查crontab服務(wù)狀態(tài):service crond status
控制服務(wù)的一些提示:service crond
2、檢查Apache(阿帕奇)服務(wù)狀態(tài):service httpd status
控制服務(wù)的一些提示:service httpd
(檢查服務(wù)狀態(tài),服務(wù)名后面一般都加d,如crond、httpd)


案例實(shí)現(xiàn)

每分鐘都打印當(dāng)前時(shí)間到一個(gè)文件中

service crond status #查看服務(wù)是否啟動(dòng)<br>service crond start #如沒有啟動(dòng)服務(wù),啟動(dòng)服務(wù)<br>crontab -l #查看當(dāng)前定時(shí)任務(wù)列表<br>crontab -e #打開定時(shí)任務(wù)列表文件,進(jìn)行編輯<br>*/1 * * * * date >> /tmp/log.txt #在最后一行插入內(nèi)容,保存退出(注意*間的空格)<br>tail -f /tmp/log.txt #監(jiān)聽log.txt文件內(nèi)容(動(dòng)態(tài)刷新)date #查看當(dāng)前時(shí)間

Crontab的基本組成

crontab的基本組成:

  • 1)系統(tǒng)服務(wù)CROND:
    每分鐘都會(huì)從配置文件刷新定時(shí)任務(wù)
  • 2)配置文件:
    文件方式設(shè)置定時(shí)任務(wù)
  • 3)配置工具crontab:
    用于調(diào)整定時(shí)任務(wù)

Crontab的配置文件格式

小栗子

eg1.每晚的21:30重啟apache

30 21 * * * service httpd restart

eg2.每月1,10,22日的4:45重啟apache

45 4 1,10,22 * * service httpd restart

eg3.每月1-10日的4:45重啟apache

45 4 1-10 * * service httpd restart

eg4.每隔兩分鐘重啟apache

*/2 * * * * service httpd restart 1-59/2 * * * * service httpd restart(奇數(shù)分鐘重啟)0-58/2 * * * * service httpd restart(偶數(shù)分鐘重啟)

eg5.每晚11-早上7點(diǎn)之間,每隔一個(gè)小時(shí)重啟apache

* 23-7/1 * * * service httpd restart

eg6.每天18:00-23:00之間每隔30分鐘重啟apache

0,30 18-23 * * * service httpd restart 0-59/30 18-23 * * * service httpd restart




Crontab工具的使用

通過 man crontab 或者 crontab --help 查看

1、查看某用戶的計(jì)劃任務(wù)列表:

crontab -u 用戶名 -l(默認(rèn)-u為當(dāng)前登錄用戶)

2、修改某用戶的計(jì)劃任務(wù):

crontab -e

3、刪除crontab文件

crontab -r [username]

root可以指定用戶刪除其他用戶的crontab文件。 其他用戶只可以刪除自己的crontab文件

4、查看生成的最終計(jì)劃任務(wù)文件:

/var/spool/cron

5、crontab日志位置:

/var/log/cron

Crontab的配置文件

1、用戶的crontab定時(shí)任務(wù)保存文件:
/var/spool/cron/root
或者:/var/spool/cron/tabs/root
2、全局(系統(tǒng))配置文件:
– /etc/crontab
– 注意格式

1.利用命令crontab -e 進(jìn)入的是用戶級(jí)別的計(jì)劃任務(wù)

2.用 vi /etc/crontab 進(jìn)入后編輯的是系統(tǒng)級(jí)的計(jì)劃任務(wù)

cd /etc ls cron* tail -f /var/log/cron(任務(wù)執(zhí)行日志) crontab -e實(shí)際上是在修改目錄/var/spool/cron/root下的用戶對(duì)應(yīng)的文件 cd /etc/cron.d vi sysstat crontab sysstat crontab 文件名 會(huì)把(crontab -e)文件里的內(nèi)容都覆蓋 ,所以要非常小心crontab -l -u crontester查找某個(gè)用戶下的定時(shí)程序 cron.d可以認(rèn)為是對(duì)系統(tǒng)級(jí)配置的補(bǔ)充,crontab -l,crontab -e看不到,編輯不了cron.d里的配置可以在該文件夾下自己創(chuàng)建 vi crontest */1 * * * * echo 'file in cron.d/crontest' tail -f /var/log/cron

Crontab的日志

  • /var/log/cron 保存著所有的crontab的操作
  • /var/spool/mail/ 下也會(huì)以郵件的方式發(fā)送日志信息

Crontab的常見錯(cuò)誤

Crontab的常見錯(cuò)誤之環(huán)境變量

不可引用環(huán)境變量

cd ~

ls -a
可以看到有.bash_profile文件

vim .bash_profile
新增一個(gè)環(huán)境變量

-------------- APPDIR=/ect export APPDIR -----------------

更新到環(huán)境變量:

source .bash_profile

檢驗(yàn):
echo $APPDIR 可以正常顯示,能夠被識(shí)別
但是在下面這條命令行添加在crontab里不能被識(shí)別

*/1 * * * * echo $APPDIR >> /tmp/appdir.log

————————————————————————
在/var/log/cron任務(wù)執(zhí)行日志中可以看到,但是cat打開/tmp/appdir.log內(nèi)容是空的

Crontab的常見錯(cuò)誤之命令行操作

  • 1、test 表達(dá)式 測(cè)試后面的表達(dá)式是否真實(shí),但必須加空格 (如果不加空格,那么該命令恒為正確的。)例如: test 1 = 0 如果結(jié)果是0 ,那么是正確的(與C語(yǔ)言相反)
  • 2.通過echo $?來查看上一次的執(zhí)行結(jié)果。
  • 3、date +%w 這個(gè)是顯示今天是星期幾
  • 4、需要注意的是在crontab文件中,%需要進(jìn)行轉(zhuǎn)義

第三個(gè)和第五個(gè)域之間執(zhí)行的是或操作 即 星期幾和每月幾號(hào)是或關(guān)系

例:4月的第一個(gè)星期日早晨1時(shí)59分運(yùn)行a.sh

①59 1 1-7 4 0 /root/a.sh 錯(cuò)誤的寫法
②59 1 1-7 4 * testdate +%w-eq 0 && /root/a.sh 正確的寫法


Crontab的常見錯(cuò)誤之分鐘設(shè)置誤用

兩小時(shí)運(yùn)行一次date命令

錯(cuò)誤:

* 0,2,4,6,8,10,12,14,16,18,20,22 * * * date

正確:

0 */2 * * * date

Crontab綜合案例解析

crontab最小時(shí)間是1分鐘,控制1分鐘執(zhí)行多次
本應(yīng)該是同時(shí)執(zhí)行,但第二條被推遲了30s執(zhí)行,效果就是1分鐘執(zhí)行了2次

*/1 * * * * date>>/root/test/half.log */1 * * * * sleep 30s;date>>/root/test/half.log

&& 和|| 和 ;的區(qū)別

  • command1 && command2: &&左邊的command1執(zhí)行成功(返回0表示成功)后,&&右邊的command2才能被執(zhí)行。
  • command1 || command2: 如果||左邊的command1執(zhí)行失敗(返回1表示失敗),就執(zhí)行&&右邊的command2。
  • command1;command2: 命令順序執(zhí)行,不管前面的是否正確后面的都會(huì)依次執(zhí)行

定時(shí)備份oracle數(shù)據(jù)

#!/bin/bash export ORACLE_BASE=/data/oracle export ORACLE_HOME=/oracle/product/102 export ORACLE_SID=sidname export ORACLE_TERM=xterm export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib export LANG=C export NLS_LANG=AMERICAN_AMERICA.AL32UTF8#以上代碼為Oracle數(shù)據(jù)庫(kù)運(yùn)行賬號(hào)oracle的系統(tǒng)環(huán)境變量設(shè)置,必須添加,否則crontab任務(wù)計(jì)劃不能執(zhí)行。 date=date +%Y_%m_%d #獲取系統(tǒng)當(dāng)前日期時(shí)間 days=5 #設(shè)置刪除5天之前的備份文件 orsid=ip:port/sidname #Oracle數(shù)據(jù)庫(kù)服務(wù)器IP、端口、SID orowner=master_ccpx2 #備份此用戶下面的數(shù)據(jù) bakuser=master_ccpx2 #用此用戶來執(zhí)行備份,必須要有備份操作的權(quán)限 bakpass=passwd #執(zhí)行備注的用戶密碼 bakdir=/aaa/bbb/oracle_data #備份文件路徑,需要提前創(chuàng)建好 bakdata=$orowner"_"$date.dmp #備份數(shù)據(jù)庫(kù)名稱 baklog=$orowner"_"$date.log #備份執(zhí)行時(shí)候生成的日志文件名稱 ordatabak=$orowner"_"$date.tar.gz #最后保存的Oracle數(shù)據(jù)庫(kù)備份文件 cd $bakdir #進(jìn)入備份目錄 mkdir -p $orowner #按需要備份的Oracle用戶創(chuàng)建目錄 cd $orowner #進(jìn)入目錄 exp $bakuser/$bakpass@$orsid grants=y owner=$orowner file=$bakdir/$orowner/$bakdata log=$bakdir/$orowner/$baklog #執(zhí)行備份 tar -zcvf $ordatabak $bakdata $baklog #壓縮備份文件和日志文件 find $bakdir/$orowner -type f -name "*.log" -exec rm {} \; #刪除備份文件 find $bakdir/$orowner -type f -name "*.dmp" -exec rm {} \; #刪除日志文件 find $bakdir/$orowner -type f -name "*.tar.gz" -mtime +$days -exec rm -rf {} \; #刪除5天前的備份

總結(jié)

以上是生活随笔為你收集整理的Linux中的计划任务—Crontab调度重复执行的任务的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。