Linux-計劃任務

来源:https://www.cnblogs.com/yanjieli/archive/2018/09/08/9610444.html
-Advertisement-
Play Games

計劃任務 cron 計劃任務: 讓系統在將來的指定時間點執行某些任務(程式);任務可以周期性執行也可以僅僅執行一次。 Linux系統中計劃任務:at和cron服務是操作系統內置的2個服務,預設情況是安裝好的。 at服務:指定某個時間一次性執行某個任務,依賴於系統後臺atd進程 cron服務:指定時間 ...


計劃任務 cron

計劃任務:

讓系統在將來的指定時間點執行某些任務(程式);任務可以周期性執行也可以僅僅執行一次。

Linux系統中計劃任務:at和cron服務是操作系統內置的2個服務,預設情況是安裝好的。

at服務:指定某個時間一次性執行某個任務,依賴於系統後臺atd進程

cron服務:指定時間周期性執行某個任務,依賴於系統後臺crond進程

 作用: 計劃任務主要是做一些周期性的任務,目前最主要的用途是定期備份數據

Schedule one-time tasks with at. 一次性調度執行 at
Schedule recurring jobs with cron. 迴圈調度執行 cron
Schedule recurring system jobs.
所有計劃任務執行中的輸出都會以郵件的方式發送給指定用戶, 除非重定向

一次性調度執行 at

 at任務計劃:

1、確定at這個服務是否安裝:

# rpm -q at
at-3.1.10-43.el6_2.1.x86_64

2、相關的文件:

# rpm -ql at |grep etc
/etc/at.deny      用戶控制列表,拒絕用戶列表/etc/at.allow(預設麽有,允許列表);預設是允許所有用戶使用at服務
/etc/rc.d/init.d/atd   at服務的啟動腳本
/etc/pam.d/atd        驗證機制
/usr/bin/at            --命令
/usr/bin/atq           --查看at的任務列表
/usr/bin/atrm          --刪除任務
/var/spool/at/xxx      --計劃任務的文本文件保存目錄

3、常用的命令:

at:制定一個一次性計劃任務
-l 列出at任務 等於atq
-d 刪除at任務 等於atrm
-c 查看任務內容

4、命令格式:

at 3:30pm    
at 15:30
at 10:10 today
at now+2min           ——2分鐘後執行
at 4pm + 3 days        ——3天以後的下午4點運行此job
at 10am Jul 31         ——在7月31日上午10點運行此job
at 1am tomorrow        ——明天上午1點運行此job
at 4:00 2020-12-12     ——在2020-12-12日的凌晨4點執行
at -t 09201430         ——9月20日的下午2:30運行此job
at -t 202009201430     ——2020年的9月20日的下午2:30運行此job
# man at
at now + 5 minutes    任務在5分鐘後運行
at now + 1 hour       任務在1小時後運行
at now + 3 days       任務在3天後運行
at now + 2 weeks      任務在兩周後運行

crtl + d    --結束

實例:比較複雜的任務可以保存到腳本:

at服務訪問控制:

/etc/at.allow  作用:只允許文件裡面出現的用戶使用atd這個服務,如果這個文件存在,就不去考慮at.deny

/etc/at.deny  作用:只拒絕裡面的用戶使用atd這個服務, 如果at.allow不存在的時候,才生效

示例

例1:
[root@tianyun ~]# at now +1min       --一分鐘後執行
at> useradd uuuu  
at> <EOT>
job 1 at Sat Mar 21 22:34:00 2015
[root@localhost~]# atq
3    Thu Mar 30 09:55:00 2017 a root
[root@tianyun ~]# id uuuu

例2:
[root@localhost~]# vim at.jobs         ---創建一個文件,名字可以自定義
useradd u99
useradd u00
touch /`date +%F`.txt
[root@localhost~]# at now +1min < at.jobs              一分鐘後執行輸入這個文件裡面的命令並執行

周期性計劃任務 crontab

當需要周期性的重覆執行任務是可以使用cron服務;該服務每分鐘檢查一次,並執行符合條件的任務

1、查看服務是否啟動

# service crond status

# /etc/init.d/crond status

2、查看相關的文件列表

# which crontab
# rpm -qf /usr/bin/crontab
# rpm -ql crontabs
# rpm -ql cronie
/var/spool/cron  用戶級別的計劃任務存放目錄(以用戶命名)
/etc/cron.deny
/etc/pam.d/crond
/etc/rc.d/init.d/crond 啟動腳本
/usr/bin/crontab  用戶級別的命令
/usr/sbin/crond   二進位的命令

/etc/cron.d/           裡面通常存放用來設定除了每天/每周/每月之外的定時任務,比如說每小時周期執行的任務和其他任何定時任務。
/etc/cron.d/0hourly    系統每小時第一分鐘需要執行的任務
/etc/cron.deny         用戶拒絕列表(在該文件中的用戶不能使用cron服務)
/etc/crontab           該文件的作用相當於/etc/cron.d/下麵的某一個文件,可以定義系統計劃任務。
/var/spool/cron        這個目錄用來存放各個用戶自己設定的定時任務,普通用戶沒有許可權直接訪問,必須通過crontab 命令(setuid)
/etc/cron.monthly/     存放系統每個月需要執行的腳本
/etc/cron.weekly/      存放系統每周需要執行的腳本
/etc/cron.daily/       存放系統每天需要執行的腳本
/etc/cron.hourly/      存放系統每小時需要執行的腳本

3、crontab 格式說明

# cat /etc/crontab    這裡存放有系統運行的一些調度程式。每個用戶可以建立自己的調度crontab。

SHELL=/bin/bash     預設的shell,告訴系統使用哪個shell
PATH=/sbin:/bin:/usr/sbin:/usr/bin   定義命令的路徑
MAILTO=root     命令的執行結果以郵件的形式發送給root(不管是標準正確還是錯誤結果),如果MAILTO=“” ,代表不會發郵件給任何人。
HOME=/          定義在執行命令或腳本時的主目錄

# For details see man 4 crontabs

# Example of job definition:
# .---------------- 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
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

前5個欄位分別表示:
    分鐘:0-59
    小時:0-23
    日期:1-31
    月份:1-12
    星期:0-7(0表示周日或者7表示周日)

還可以用一些特殊符號:
  ,: 表示分割,間隔。如第二個*表示成 8,10,就表示8點和10點
 -:表示一個段,如第二個*表示成 1-5,就表示1到5點
/n : 表示每個n的單位執行一次,如第二個*表示成*/1, 就表示每隔1個小時執行一次命令。

示例

00 02 * * * ls                       //每天2:00整
00 02 1 * * ls                       //每月1號2:00整
00 02 14 2 * ls                      //每年2月14號2:00整
00 02 * * 7 ls                       //每周日2:00整
00 02 * 6 5 ls                       //每年6月的周五2:00整
00 02 14 * 7 ls                      //每月14號2:00整  或者  每周日2:00整,這兩個時間都執行
00 02 14 2 7 ls                      //每年2月14號2:00整  或者  每周日2:00整,這兩個時間都執行

00 02 * * * ls                       //每天2:00整
*   02 * * * ls                      //每天2:00中的每一分鐘
* * * * * ls                         //每分鐘執行ls
* * 14 2 * ls                        //2月14號的每分鐘 1440分鐘

*/5 * * * * ls                       //每隔5分鐘
00 02 1,5,8 * * ls                   //每月1,5,8號的2:00整
00 02 1-8 * * ls                     //每月1到8號的2:00整

思考1

如果系統斷電或者宕機,錯過任務執行的時間,怎麼辦?

anacron任務:

  是cron服務的擴展,配合cron服務一起使用,當系統斷電或者宕機,錯過任務執行的時間時,系統啟動後它會再次執行未執行的任務。

配置文件:/etc/anacrontab

#period in days     delay in minutes   job-identifier   command
命令執行的頻率(天數)   延遲時間(分鐘)     任務描述          要執行的命令
1                      5               cron.daily        nice        run-parts /etc/cron.daily
7                      25              cron.weekly       nice        run-parts /etc/cron.weekly
@monthly               45              cron.monthly      nice        run-parts /etc/cron.monthly

 

說明:對於每個計劃任務,anacrontab先判斷period(執行頻率)期間內是否被執行了,如果沒執行則等待delay(延遲時間),再次執行該任務。

一般情況下該文件不用修改,知道原理就可以。

總結:

1、如果你有很多任務需要每天|周|月重覆執行,並且希望系統能自動把漏掉的任務補回來,那麼你可以將你的腳本放在系統響應的目錄下麵/etc/cron.{d{daily,weekly,monthly},並賦予可執行許可權。

2、以上需要系統定時去調用的任務將就叫系統級別的計劃任務。

示例

通過至少2種方法指定一個周期性的計劃任務:

1、stu01用戶每周日和周三的凌晨5點04分在查看/etc/hosts文件內容並保存到/tmp/stu01文件中
04 05 * * 0,3 stu01 cat /etc/hosts >/tmp/stu01

vim 1.sh
cat /etc/hosts >/tmp/stu01

04 05 * * 0,3 stu01 /root/1.sh

2、root用戶往/tmp/stu01的文件里每隔2分鐘追加當前的系統時間

*/2 * * * * root date >>/tmp/stu01

 

 設定用戶級別的定時任務

相關命令:

普通用戶編輯自己的定時任務
crontab -e               <--- 編輯當前用戶自己的定時任務(使用環境變數EDITOR指定的預設編輯器)
crontab -l               <--- 列出當前用戶自己所有的定時任務
crontab -r               <--- 刪除當前用戶自己所有的定時任務


作為管理員,root可以設定/調整所有用戶的定時任務,命令和上面類似,只是增加了一個-u <username> 的參數
crontab -e -u redhat        <--- 編輯指定用戶的定時任務(使用環境變數EDITOR指定的預設編輯器)
crontab -l -u redhat        <--- 列出指定用戶所有的定時任務
crontab -r -u redhat        <--- 刪除指定用戶所有的定時任務

說明:
1、crontab 預設調用的是vi編輯器,編輯計劃任務的用法和vi一樣。如果想自己定義編輯器,通過修改環境變數完成。如export EDITOR=vim
2、用戶級別的任務定義當中,沒有用戶名那一欄,如果像定義系統級別的命令那樣,輸入用戶名,crontab編輯器不會提示格式錯誤,但是任務不會得到正確的執行。
* * * * * command or file.sh or run-parts /dir/
說明:
1、如果執行腳本文件,那麼需要有可執行許可權,如果沒有可以使用bash|sh等指定一種解釋器執行
2、如果run-parts,那麼後面指定的目錄里的所有腳本文件必須要有可執行許可權
3、用戶級別的計劃任務,不需要指定username
4、普通用戶不能夠直接vim修改自己的計劃任務文件(/var/spool/cron/username)

 cron使用限制

/etc/cron.deny          ——只拒絕哪些用戶不能他用crontab,預設存在空文件
/etc/cron.allow         ——允許哪些用戶使用crontab

如果同一個用戶即在拒絕里又在允許里,預設允許優先。

 思考2

如果我用crontab -e 寫了晚上8:30去關機,但是我18點就手動關機了,第二天來9點來開機,它會不會延遲一段時間又關機呢?

 答案:不會

示例

備份etc目錄,要求:
1. 每天4:00備份/etc目錄到/var/back
mkdir /var/back
tar -czf /var/back/$(date +%F)_etc.tar.gz /etc
00 04 * * *

2. 將備份命令寫在腳本中,如/root/back.sh,加執行許可權
vim /root/back.sh
tar -czf /var/back/$(date +%F)_etc.tar.gz /etc

chmod +x /root/back.sh

3. 每天備份的文件名包含當天的日期,如2016-11-09_etc.tar.gz
4. 計劃任務執行時,屏幕不產生任何輸出
00 04 * * * /root/back.sh &>/dev/null 
5. 只保留最近5天的備份 
find /var/back -ctime +5 -exec rm -f {} \;
find /var/back -ctime +5 |xargs rm -f

vim /root/bak.sh
mkdir /var/back
tar -czf /var/back/$(date +%F)_etc.tar.gz /etc
find /var/back -ctime +5 -exec rm -f {} \;

chmod +x /root/bak.sh

crontabe:
00 04 * * * bash /root/bak.sh
#!/bin/bash dir=/var/back #判斷備份的目錄是否存在,如果不存在就創建它 [ ! -d $dir ] && mkdir $dir #備份/etc目錄,使用tar工具 tar -czvf $dir/$(date +%F)_etc.tar.gz /etc #備份的文件只需要保留5天以內 find $dir -ctime +5 -exec rm -f {} \; crontabe: 00 04 * * * bash /root/bak.sh

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Quartz.Net的集群部署詳解 標簽(空格分隔): Quartz.Net Job 最近工作上要用Job,公司的job有些不滿足個人的使用,於是就想自己搞一個Job站練練手,網上看了一下,發現Quartz,於是就瞭解了一下。 第一版 目前個人使用的是Asp.net Core,在core2.0下麵進 ...
  • UEditor是什麼 最近在在項目的時候使用到了百度的富文本編輯器。官網有詳細的操作流程文檔。這裡我只是記錄項目中常用到的一些事件。以便日後可以方便查詢。 UEditor是百度的一個javascript編輯器的開源項目。支持Php、Asp、Asp.Net 、Jsp多種後臺配置。這裡記錄的是Asp的寫 ...
  • "linq2db.EntityFrameworkCore" 是一個ef core的插件,對linq語法的擴展 對複雜的sql都有很好的支持,他是基於linq2db (provided by LINQ To DB) 如果你使用了linq2db的語法擴展那麼你必須使用下麵的方法進行查詢 下麵是 linq ...
  • 對於Word文檔中包含較多的超鏈接,如果一個個來刪除很花費時間和精力,本篇文章將提供一種可用於批量刪除Word中的超鏈接的方法。這裡的超鏈接可以是頁眉頁腳處的超鏈接、正文中的超鏈接、表格中的超鏈接、文字超鏈接、圖片超鏈接等等。下麵將具體演示如何來進行代碼操作。 所需工具 Free Spire.Doc ...
  • 在開發項目的時候,往往碰到的不同的需求情況,相容不同類型的資料庫是我們項目以不變應萬變的舉措之一,在底層能夠相容多種資料庫會使得我們開發不同類型的項目得心應手,如果配合快速的框架支持,那更是錦上添花的舉措。我開發的項目或者框架,採用了微軟企業庫Enterprise Library的模塊,傾向於支持多... ...
  • 1、前臺的表單: <form enctype="multipart/form-data" method="post" id="inportFile" name="inportFile"><input type="file" name="excelfile" id="excelfile"/></for ...
  • 這次我選擇安裝Gentoo,用來做我學習的筆記。這次我是使用虛擬機安裝Gentoo,一是方便操作,二是可以看著手冊,一邊看一邊操作,嚴格按照手冊上的步驟執行,一般是不會出現問題的。 查看手冊最好學會看英文原版的,因為更新快,中文原版的可能很久無法更新,也會導致安裝失敗。 這裡提供amd 64位的英文 ...
  • 1、切換至root 或 然後輸入密碼 這種只切換身份,不切換home工作目錄 或 然後輸入密碼 這種不僅切換身份,而且切換home工作目錄 2、切換至普通用戶(比如:oracle) 然後輸入密碼 這種只切換身份,不切換home工作目錄 或 然後輸入密碼 這種不僅切換身份,而且切換home ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...