Linux計劃任務

計劃任務

工作當中有時候需要將某件事情在未來的某個特定的時間執行,而自己確不在機器旁,該如何是好?像這樣在每天特定的時間內去安排做一些事情這樣,一種事情我們就稱之為例行性的計劃任務,其實在我們的操作系統當中都有類似的例行性任務計劃功能,那如何去像設定鬧鐘一種在Linux上指定例行性計劃任務并實施,主要有兩種工具:atcrontab

 

計劃任務分類:

一次性的計劃任務:只執行一次就結束

周期性的計劃任務:每隔一定的周期去做相同的事情

 

一、 一次性計劃任務

at用來專門處理一次性計劃任務,crontab是根據用戶自定義的時間內,循環的去做某些事情

 

at

at是由atd服務提供的,在6版本的系統上使用service atd start啟動服務,7版本的系統上使用systemctl start atd啟動服務(atd服務不起來,at計劃是不工作的,at計劃任務是依靠atd服務來工作運行的)

1.at使用方法

at [-V] [-q queue] [-f file] [-mMlbv]  -c job [job…]TIME

-V:顯示版本信息

-l:相當于atq,列出指定隊列中等待運行的作業

-d n:相當于atrm,刪除指定的作業

-c n:查看第n個具體作業任務

-f at要執行的所有任務放置于文件中,讓at讀取此文件作為要運行的任務,如at –f /root/a.txt

 

2.TIME的格式:定義什么時候進行at任務的時間

HH:MM  12:00

在今天的HH:MM時刻進行,若該時間以過,則明天HH:MM進行此工作

 

HH:MM YYYY-MM-DD   13:00 2016-09-01

強制規定在某年某月的某天的特殊時刻進行該工作

 

HH:MM[am|pm] [Mouth][Date]:如04pm March  10

強制在某年某月的某個時刻進行

 

HH:MM[am|pm] +number[minutes][hours][days][weeks]:如now+10minutes04pm+3days,指在某個特定時間點再加某個時間點后才運行

 

3.模糊時間:

noon:正午

midnight:子夜

teatime:下午四點

 

4.執行方式

交互式(直接在命令執行at命令進入交互模式)

輸入重定向

at  –f  文件

 

依賴于atd服務,需要啟動才能實現at任務

at隊列存放在/var/spool/at目錄中

通過/etc/at.allow  /etc/at.deny控制用是否能執行at任務

首先尋找/etc/at.allow文件,文件中的使用才能使用at,沒有在allow文件中的用戶則不能使用at,如果某個用戶即不在allowdeny文件中,那么只有root才能使用at,同理,在deny文件中的用戶則不能使用at,不在deny 文件中的用戶則可以使用at,如果兩文件寫了同一個用戶,首先匹配allow即允許(默認at.allow文件不存在,需用戶自己創建)

 

二、周期性計劃任務

cron

相關程序包

cronie:主程序包,提供crond守護進程及相關輔助工具,自身是一個不間斷運行的服務

cronie-anacroncronie的補充程序;用于監控cronie任務執行狀況,能夠實現cronie的任務因為各種原因在過的時間該執行而未執行的任務恢復正常

crontabs:包含CentOS提供系統維護任務

 

確保crond守護處于運行狀態

systemctl  status  crond   7版本的系統

 

service    status   crond   66以下版本的系統

 

計劃周期性執行的任務交給crond,到指定時間會自動運行

 

(一) 系統cron任務:系統維護作業

/etc/crontab內容如下

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

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

五個字段字段的意思分別是分鐘         小時                        

 

例如:凌晨4點備份/etc/目錄下面的內容到/tmp

0   4   *    *     *     root    tar zcf  /tmp/etc.tar.gz   /etc/

1.時間的有效取值

分鐘  0-59

小時  0-23

    1-31

       1-12

       0-7   0.7表示周日


2. 時間通配

*   *   1   *   *   *  每月的1號執行某任務

特定值:給定時間有點取值范圍內的值

離散取值

10,40   *   *   *   *  每周每天每小時的第10分鐘和第40分鐘執行

連續取值:-

*   *    *   *  1-5  周一到周五運行

 

3.在指定時間范圍上定義步長

/#:#即為步長

*/3  *   *    *    * 每三分鐘執行

 

 

cron的環境變量,cron執行所有命令都去PATH環境變量指定的路徑下去找

PATH  /bin:/sbin:/usr/bin:/usr/sbin

 

4.時間格式

@rebootRun once after reboot. 重啟后執行

@yearly0 0 1 1 *

@annually0 0 1 1 *

@monthly0 0 1 * *

@weekly0 0 * * 0

@daily0 0 * * *

@hourly0 * * * *

 

5.系統的計劃任務

/etc/crontab

/etc/cron.d            配置文件

/etc/cron.hourly   每小時任務

/etc/cron.daily     每日任務

/etc/cron.weekly   每周任務

/etc/cron.monthly  每周任務

 

 

(二) anacron系統

運行計算機關機時cron不運行的任務,CentOS6以后版本取消anacron服務,由crond服務管理

假設計算機沒有一直開機

對筆記本電腦、臺式機、工作及其他不一直開機的系統很重要

對偶爾要關機的服務器很有用

 

配置文件:/etc/anacrontab,負責執行/etc/cron.daily    /etc/cron.weekly   /etc/cron.monthly中系統任務。/etc/cron.hourly/etc/cron.d/0hourly執行

# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

# the maximal random delay added to the base delay of the jobs

RANDOM_DELAY=45

# the jobs will be started during the following hours only

START_HOURS_RANGE=3-22

 

#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

字段1:如果在這些日子里沒有運行這些任務

字段2:在重新引導后等待這么多分鐘后運行它

字段3:任務識別器,在日志文件中識別

字段1:要執行的任務

 

linux系統中管理臨時文件

rhel6使用/etc/cron.daily/tmpwatch定時清除臨時文件

rhel7使用systemd-tmpfiles-setup服務實現

 

配置文件:

/etc/tmpfiles.d/*.conf

/run/tmpfiles.d/*.conf

/usr/lib/tmpfiles/*.conf

/usr/lib/tmpfiles.d/tmp.conf

d  /tmp 1777 root root 10d

d  /var/tmp  1777  root root  30d

 

命令

system-tmpfiles –clean|remove|create  configfile

 

 

(三) 用戶計劃任務管理

用戶級別的周期性計劃是通過crontab命令實現的,其也有對應的配置文件/var/spool/cron、目錄中與用戶名同名的文件中,可以通過crontab命令來指定任務計劃

crontab命令(實則打開的是一個vim編輯器編輯里面的內容)

crontab [-u user] [-l | -r | -e] [-i] [-s]

-l:列出所有 任務

-e:編輯任務

-r:移除所有任務

-i:通-r一同使用,以交互式模式移除指定任務

-u user:僅root可運行,指定用戶管理cron任務

 

控制用戶執行計劃任務

/etc/cron.allow(文件默認不存在)  /etc/cron.deny

管理機制跟at相同

普通用戶執行crontab具有suid權限,當root用戶更改了普通用戶的計劃任務的屬主為root,普通用戶修改,文件被覆蓋了,文件的屬主又變成普通用戶了

 

注意:運行結果的標準輸出和錯誤以郵件通知給相關用戶

command  > /dev/null

command &> /dev/null

 

對于cron任務來講,%有特殊用途,如果在命令中要使用%,則需要轉義;不過,如果把%防止于單引號中,也可以不用轉義

 

我們知道在計劃當中最小單位是分鐘,那我們實際工作中有時需要更精確的執行某項任務,需要達到秒級別的任務,那該如何實現呢,實則可以用循環的方式來執行如下:

*  *  *  *  *   for  min   in  0   1   2  ;do echo  “hi”;sleep 3;done

 

如何實現每7分鐘運行一次任務

sleep命令

 

sleep  number  [SUFFIX]

SUFFIX

s:秒,默認

mfen

h:小時

d:天

 

 

 

1、  每周2, 4, 7備份/var/log/messages文件至/logs目錄中,文件名形如“messages-yyyymmdd

crontab  -e

*   *   *   *  2,4,7   tar  -zcf   /logs/messages-`date ‘+%F’`   /var/log/messages

 

2、  每兩小時取出當前系統/proc/meminfo文件中以SM開頭的信息追加至/tmp/meminfo.txt文件中

*   */2  *   *   *  grep –Eo “^[sM].*” /proc/meminof >> /tmpmeminfo.txt

 

原創文章,作者:fszxxxks,如若轉載,請注明出處:http://www.www58058.com/45121

(0)
fszxxxksfszxxxks
上一篇 2016-09-19 13:49
下一篇 2016-09-19 13:49

相關推薦

  • Linux下常用壓縮工具總結

    gzip: 1)只能針對普通文件進行壓縮,對文件夾、符號鏈接無效。 2)如果想對多個文件一起壓縮并打包,gzip是無法辦到的,需要結合tar進行 [root@mysql-master databackup]# ll 總用量 32 drwx—— 2 root root 4096&nb…

    Linux干貨 2016-12-05
  • 馬哥網絡21-第5周作業

    1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; [root@localhost proc]# grep "^[[:space:]]\{1,\}" /boot/grub/grub.conf root (hd0,0) kernel /vmlinuz-2…

    Linux干貨 2016-08-08
  • 新手上路,多多擔待,分享linux的ls 常用選項

    ls 命令   ls[OPTION]…[FILE]….選項 和 參數可有可無。 定義:顯示指定路徑下的文件列表。  -a: 全拼是all,所有的意思,ls  -a能顯示出所有的文件,包括隱藏的。點開頭和..開頭的隱藏文件都能看見。  -l:后跟文件 可以查看文件的大小,和權限(一般用戶都有讀的權…

    2017-05-21
  • 馬哥教育網絡19期+第十五周課程練習

    1、總結sed和awk的詳細用法;   a).sed命令 sed可以實現grep的大部分功能,而且還可以查找替換 [root@localhost ~]# sed '10'p -n 1.txt [root@localhost ~]# sed &#039…

    Linux干貨 2016-08-22
  • 【譯文】如何正確設定MySQL程序的選項

    MySQL手冊文檔版本:5.6  章節:4.2 Using MySQL Programs  略去了部分windows下使用mysql的相關的說明 譯者:古二娃 時間:2015-03-15 章節目錄: 4.2 Using MySQL Programs 4.2.1 Invoking MySQL Programs …

    Linux干貨 2015-03-10
  • Linux Cluster講解

    什么是集群     集群是一組的、通過高速的計算機,它們構成了一個組,并以單一系統的模式加以管理。一個客戶與集群相互作用時,集群像是一個獨立的服務器。集群配置是用于提高可用性和可縮放性。     和傳統的高性能計算機技術相比,集群技術可以利用各檔次的服務器作為節點,系統…

    Linux干貨 2016-11-07
欧美性久久久久