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
下一篇 2016-09-19

相關推薦

  • N22-第一周作業

    1、描述計算機的組成及其功能    組成:        硬件:            CPU:運算器、控制器、寄存器、緩存     &nb…

    Linux干貨 2016-08-15
  • bind的安裝實現

    首先介紹一下我的測試環境:centos 7+入網(為了試行一下自己的安裝文檔,才裝的虛擬機) 1> yum install bind bind-chroot -y     因為剛剛安裝的虛擬機,這里我就不檢查了; 2>vim named.conf [root@localhost named]# cat /e…

    Linux干貨 2016-03-20
  • httpd功能配置之虛擬主機

       apache默認使用80端口提供服務,使用主服務器配置的話,一臺物理機只能提供一個站點服務;可以使用虛擬主機方式提供不同的訪問,以實現一臺主機提供多站點服務。    虛擬主機的實現方式有三種:基于端口、基于IP、基于主機名。    一、基于端口的虛擬主機     &nbsp…

    Linux干貨 2016-03-12
  • SDCC 2017互聯網運維開發實戰峰會上海站

    3月17日-19日,由CSDN重磅打造的互聯網運維開發實戰峰會、數據庫核心技術與應用實戰峰會和互聯網應用 架構實戰峰會將在上海舉行。 作為SDCC 2017(中國軟件開發者大會)系列技術峰會的一部分,秉承干貨實料(案例)的內容原則。 這三場峰會將邀請業內頂尖的架構師和技術專家,共同探討運維工具研發與實踐、運維自動化系統的構建、大數據與運維…

    Linux干貨 2017-02-11
  • 馬哥教育網絡版21班第四周作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其他用戶均沒有任何訪問權限 [root@localhost ~]# cp -rf /etc/skel/ /home/tuser1 [root@localhost ~]# chmod&n…

    Linux干貨 2016-08-05
  • grep,find等相關命令

    Q1:顯示當前系統上root、fedora或user1用戶的默認shell; ~]# grep -E "^root|^fedora|^user1" /etc/passwd | awk -F: '{print $1,$NF}' ro…

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