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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux/windows系统定时任务调度总结

發布時間:2024/10/8 linux 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux/windows系统定时任务调度总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

定時任務是辦公自動化中比較重要的一環。

Linux/windows系統定時任務調度總結

  • 概述
  • 服務啟動和關閉
  • 任務調度全局配置
  • 用戶配置文件
  • crontab定時任務格式
  • crontab定時任務實例
    • 時間頻次示例
    • 輸入輸出重定向
    • 忽略輸入nohup
    • 后臺執行&
    • 時間處理
  • 在Windows系統上設置定時任務

概述

crontab命令用于設置周期性被的指令。該命令從標準輸入設備讀取指令,并將其存放于"crontab"文件中,以供之后讀取和執行。 可以用crontab定時處理離線任務,比如每天凌晨2點更新數據等,經常用于系統任務調度。

服務啟動和關閉

一般Linux系統中都會有crontab,如果沒有可以使用包管理工具安裝:

yum -y install vixie-cron yum -y install crontabs

crontab服務的啟動和關閉命令:

service crond start # 啟動服務 service crond stop # 關閉服務 service crond restart # 重啟服務 service crond reload # 重新載入配置 service crond status # 查看crontab服務狀態 # 可以使用下面的命令加入開機啟動 chkconfig --level 345 crond on

任務調度全局配置

cron.daily # 每天執行一次 cron.weekly # 每個星期執行一次 cron.monthly # 每個月執行一次 cron.hourly # 每小時執行一次 cron.d # 系統自動定期需要做的任務 crontab # 設定定時任務執行文件 cron.deny # 文件就是用于控制不讓哪些用戶使用crontab功能

用戶配置文件

每個用戶都有自己的crontab配置文件,使用crontab -e命令進行編輯。保存后系統會自動存放于/var/spool/cron/目錄中,文件以用戶名命名。

Linux的crontab服務每隔一分鐘去讀取一次/var/spool/cron,/etc/crontab,/etc/cron.d下面所有的內容。

crontab命令:

crontab -e:編輯當前用戶的定時任務列表 crontab -l:查看當前用戶的定時任務列表 crontab -r:刪除當前用戶的定時任務列表

crontab定時任務格式

crontab每一條記錄為一個定時任務,需要遵循相應的定義規則。

* * * * * command
  • minute:表示分鐘,可以是從0到59之間的任何整數
  • hour:表示小時,可以是從0到23之間的任何整數
  • day:表示日期,可以是從1到31之間的任何整數
  • month:表示月份,可以是從1到12之間的任何整數
  • week:表示星期,可以是從0-7之間的任何整數,這里的0或7代表星期日
  • command:要執行的命令,可以是系統命令,也可以是自己編寫的腳本

每一個星號部分可用下面的特殊符號

  • 星號(*):通配符匹配,代表所有可能值
  • 逗號(,):可以用逗號隔開若干個值,指定一個序列范圍,例如“1,2,5,7,9”
  • 中杠(-):可以用整數之間的中杠表示一個整數范圍,例如“2-6”,表示“2,3,4,5,6”
  • 正斜線(/):可以用正斜線指定時間的間隔頻率,例如“0-23/2”表示每兩小時執行一次。同時,正斜線可以和星號一起使用,例如“*/10”,如果用在minute字段,表示每十分鐘執行一次

crontab定時任務實例

時間頻次示例

  • 00 05 * * * 每天凌晨5點執行
  • 30 12 1,10,20 * * 每個月的1號、10號、20號的12:30執行
  • 10 1 * * 6,0 每周六、周日的1:10執行
  • 0,30 18-23 * * * 每天18:00-23:00之間每隔30分鐘執行
  • 0 23-7/1 * * * 晚上11點到早上7點之間,每隔一小時執行
  • 0 6-12/3 * 10 * 每年10月的每天早上6點到12點,每隔3個小時執行一次
  • 30 17 * * 1-5 周一到周五17點(下午5點)30分執行一次
  • 0 */2 * * * 每兩個小時執行一次

比如,需要每天23點58分的時候,執行一個更新數據的shell腳本,可以用crontab -e命令在最后添加一行

58 23 * * * sh /home/work/update.sh

輸入輸出重定向

在上面更新數據定時任務的實例中,如果執行update.sh的時候有錯誤信息輸出,會輸出到哪里呢? 在沒有配置輸出重定向的時候,定時任務會將錯誤輸出到下面的文件:/var/log/mail/{$user}
,這是不好的,往往需要把不同的腳本輸出到不同的日志文件,方便查看腳本的執行情況,這個時候需要使用輸出重定向。

58 23 * * * sh /home/work/update.sh >> /home/work/log/update.log 2>&1

Linux中使用0-3作為文件描述符來表示標準流。

名稱類型文件描述符操作
stdin標準輸入standard input0<,<<
stdout標準輸出standard output1>,>>
stderr標準錯誤輸出standard error output22>,2>>

在上面的定時任務腳本中,update.sh后面的>>表示將輸出追加到update.log文件中,2>&1表示標準錯誤輸出重定向等同于標準輸出。

忽略輸入nohup

有時候還會看到,在定時任務腳本前面有一個nohup的命令,該命令用于指定后面的腳本忽略輸入。

58 23 * * * nohup sh /home/work/update.sh >> /home/work/log/update.log 2>&1

后臺執行&

無論是在控制臺直接執行,還是在定時任務腳本中,在某一條命令的最后面加上&符號,表示當前命令在后臺運行,不占用控制臺

58 23 * * * nohup sh /home/work/update.sh >> /home/work/log/update.log 2>&1 &

這里需要注意,如果執行的命令有等待輸入的交互,把這個命令使用&放在后臺運行時,它會一直等待輸入,但是沒有輸入,就卡住不動了。

時間處理

再回顧上面的更新任務,它是將每一天的運行結果都重定向到update.log文件,如果輸出比較多,就需要每一天輸出不同的文件,可以通過在輸出目錄中指定日期用來分割。

58 23 * * * nohup sh /home/work/update.sh >> /home/work/log/`uodate_"date +\%Y\%m\%d".log` 2>&1 & # 或者下面的形式 58 23 * * * nohup sh /home/work/update.sh >> "/home/work/log/uodate_"date +\%Y\%m\%d".log 2>&1 &

這里使用date函數,需要注意的是,crontab里面的腳本命令和直接在命令行運行的腳本可能是不一樣的,尤其是date函數中的%需要轉義。

可以直接在命令行運行下面命令:

sh /home/work/update.sh >> /home/work/log/update_`date +"%Y%m%d".log` 2>&1 &

達到和定時任務里面相同的效果,都是輸出到update_20201120.log的文件。

但是如果直接在crontab中這樣配置,則無法識別,不會執行該定時任務。下面的crontab任務是不會執行的,date函數將會報錯。

58 23 * * * nohup sh /home/work/update.sh >> /home/work/log/`update_"date +%Y%m%d".log` 2>&1 &

在Windows系統上設置定時任務

進入定時任務管理界面的方式:在桌面上選中計算機圖標,右鍵–管理–系統工具–任務計劃程序

總結

以上是生活随笔為你收集整理的Linux/windows系统定时任务调度总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。