任務計劃

Linux 任務計劃、周期性任務執行

未來的某時間點執行一次任務

at

batch :系統 自行選擇空閑時間去執行此處指定的任務

周期性運行某任務

cron

[root@localhost ~]# rpm -q at                         (CentOS6中使用)
at-3.1.10-48.el6.x86_64
[root@localhost ~]# rpm -ql at
/etc/at.deny
/etc/pam.d/atd
/etc/rc.d/init.d/atd
/etc/sysconfig/atd
/usr/bin/at
/usr/bin/atq
[root@localhost ~]# runlevel
N 5
[root@localhost ~]# chkconfig --list atd 查看開機是否啟動
atd     0:off   1:off   2:off   3:on    4:on 5:on 6:off
[root@localhost ~]# service atd status 查看目前啟動狀態
atd (pid  2131) is running...
 
[root@localhost ~]# rpm -q at                     (CentOS7中使用)
at-3.1.13-22.el7.x86_64
[root@localhost ~]# rpm -ql at
/etc/at.deny
/etc/pam.d/atd
/etc/sysconfig/atd
/usr/bin/at
/usr/bin/atq
/usr/bin/atrm
/usr/bin/batch
/usr/lib/systemd/system/atd.service
[root@localhost ~]# systemctl is-enabled atd 查看開機是否啟動
enabled
[root@localhost ~]# systemctl st
start   status  stop    
[root@localhost ~]# systemctl status atd 查看目前啟動狀態
   atd.service - Job spooling tools
   Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2017-05-09 15:58:16 CST; 4h 15min ago

at任務

包:at

at 命令:at [option] TIME

常用 選項:

-V:顯示版本信息:

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

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

-c:查看具體作業任務

-f /path/from/somefile :從指定的文件中讀取任務

-m: 當任務被完成之后,將給用戶發送郵件,即使沒有標準輸出

注意:作業執行命令的結果中的標準輸出和錯誤以郵件通知給相關用戶

[root@localhost ~]# date
Tue May  9 20:35:30 CST 2017
[root@localhost ~]# at 20:40
at> ls
at> echo uname<EOT>
job 6 at Tue May  9 20:40:00 2017
[root@localhost ~]# at -l
6   Tue May  9 20:40:00 2017 a root
[root@localhost ~]# ls /var/spool/at/
a00006017c0758  spool
[root@localhost ~]# cat /var/spool/at/a00006017c0758
${SHELL:-/bin/sh} << 'marcinDELIMITER175813cb'
ls
echo uname
marcinDELIMITER175813cb
[root@localhost ~]# mail    執行完會給當前用戶發送郵件不會再屏幕顯示
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 5 messages 1 new 5 unread
 U  1 user@localhost.local  Tue Mar 21 05:25 110/4760  "[abrt] initial-setup-gui: Gio.py:"
 U  2 root                Tue May  9 20:29  16/522   "Output from your job        3"
 U  3 root                Tue May  9 20:30  15/522   "Output from your job        2"
 U  4 root                Tue May  9 20:33  16/520   "Output from your job        4"
>N  5 root                Tue May  9 20:35  14/506   "Output from your job        5"

刪除任務
[root@localhost ~]# date
Tue May  9 22:10:15 CST 2017
[root@localhost ~]# at 22:15
at> echo hostname<EOT>
job 8 at Tue May  9 22:15:00 2017
[root@localhost ~]# atq
8 Tue May  9 22:15:00 2017 a root
[root@localhost ~]# at -d 8
[root@localhost ~]# atq
[root@localhost ~]#
[root@localhost ~]#

如果定義的兩個計劃任務時間相同,會同時進行
[root@localhost ~]# date
Tue May  9 22:59:47 CST 2017
[root@localhost ~]# at 23:02
at> echo job1<EOT>
job 12 at Tue May  9 23:02:00 2017
[root@localhost ~]# at 23:02
at> echo job2<EOT>
job 13 at Tue May  9 23:02:00 2017
[root@localhost ~]# at -l
12  Tue May  9 23:02:00 2017 a root
13  Tue May  9 23:02:00 2017 a root
 
[root@localhost ~]# at -m 23:07
at> touch at.log<EOT>
job 15 at Tue May  9 23:07:00 2017
[root@localhost ~]# at -l
15 Tue May  9 23:07:00 2017 a root
[root@localhost ~]# mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 10 messages 8 unread
 U  8 root                Tue May  9 23:02  15/512   "Output from your job       12"
 U  9 root                Tue May  9 23:02  15/512   "Output from your job       13"
   10 root                Tue May  9 23:07  14/508   "Output from your job       15"
& 10
Message 10:
From root@localhost.localdomain  Tue May  9 23:07:00 2017
Return-Path: <root@localhost.localdomain>
X-Original-To: root
Delivered-To: root@localhost.localdomain
Subject: Output from your job       15
To: root@localhost.localdomain
Date: Tue,  9 May 2017 23:07:00 +0800 (CST)
From: root@localhost.localdomain (root)
Status: RO

TIME: 定義出什么時候進行at這項任務的時間

HH:MM [YYYY-mm-dd]

noon,                         中午12:00

midnight,                    午夜00:00

teatime4pm)          下午茶16:00

tomorrow                    明天

now+#{minutes,hours,days, OR weeks} 現在起(分鐘,小時,天,周)

 

at時間格式

HH:MM 02:00

在今日的HH:MM進行,若該時刻已過,則明天此時執行任務

HH:MM YYYY-MM-DD 02:00 2016-09-20

規定在某年某月的某一天的特殊時刻進行該項任務

HH:MM[am|pm] [Month] [Date]

04pm March 17

17:20 tomorrow

HH:MM[am|pm] + number [minutes|hours|days|weeks]

在某個時間點再加幾個時間后才進行該項任務

now + 5 minutes

02pm + 3 days

 

at 任務

執行方式:1.交互式 2.輸入重定向 3.at -f文件

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

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

/etc/at.{allow,deny} 控制用戶是否能執行at任務

白名單:/etc/at.allow默認不存在,只有該文件中的用戶才能執行at命令

優先級高,有此文件,deny無效,只有此文件中的用戶可使用at

黑名單:/etc/at.deny默認存在,拒絕該文件中用戶執行at命令,而沒有在at.deny文件中的使用者則可執行

優先級低,在此文件中的用戶無法使用at,不在此文件的用戶可用at

如果兩個文件都不存在,只有root可以執行at命令

 

周期性任務計劃cron

相關的程序包:

[root@localhost ~]# runlevel                                 (CentOS6)
N 5
[root@localhost ~]# chkconfig --list crond
crond       0:off   1:off   2:on    3:on    4:on 5:on 6:off
[root@localhost ~]# service crond status
crond (pid  2116) is running...
 
[root@localhost ~]# rpm -ql cronie                         (CentOS7)
/etc/pam.d/crond
/etc/sysconfig/crond
/usr/bin/crontab
/usr/lib/systemd/system/crond.service
[root@localhost ~]# rpm -q cronie
cronie-1.4.11-14.el7_2.1.x86_64

[root@localhost ~]# systemctl status crond
   crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2017-05-09 15:58:16 CST; 7h ago

cronie:主程序包,提供crond守護進程及相關輔助工具

[root@localhost ~]# rpm -ql cronie
/usr/bin/crontab
/usr/lib/systemd/system/crond.service
/usr/sbin/crond

cronie-anacroncronie的補充程序,用于監控cronie任務執行狀況,如cronie 中的任務在過去該運行的時間點未能正常運行,則anacron 會隨后啟動一次此任務

[root@localhost ~]# rpm -ql cronie-anacron
/etc/anacrontab
/etc/cron.hourly/0anacron
/usr/sbin/anacron
/usr/share/man/man5/anacrontab.5.gz
/usr/share/man/man8/anacron.8.gz
/var/spool/anacron
/var/spool/anacron/cron.daily
/var/spool/anacron/cron.monthly
/var/spool/anacron/cron.weekly
crontabs:包含CentOS提供系統維護任務
[root@localhost ~]# rpm -ql crontabs
/etc/cron.daily
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly
/etc/crontab    (定義了系統中的計劃任務)
/etc/sysconfig/run-parts
/usr/bin/run-parts
/usr/share/man/man4/crontabs.4.gz
/usr/share/man/man4/run-parts.4.gz

計劃任務

確保crond 守護處于運行狀態:

CentOS 7:

systemctl status crond

CentOS 6:

service crond status

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

系統cron 任務:系統維護作業

/etc/crontab

用戶cron 任務:

crontab 命令

日志:/var/log/cron

系統cron 任務:/etc/crontab

注釋行以 # 開頭

詳情參見 man 5 crontab

[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 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

例如:晚上9 10 分運行echo 命令;

10 21 * * * centos /bin/echo “Howdy!” (建議跟上路徑)

 

系統的計劃任務:

/etc/crontab

/etc/cron.d/配置文件

[root@localhost ~]# cd /etc/cron.d
[root@localhost cron.d]# ls
0hourly  pcp-pmie  pcp-pmlogger  raid-check  sysstat
[root@localhost cron.d]# cat 0hourly
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly

可將計劃任務腳本放于/etc/crontab下以便于管理

/etc/cron.hourly/腳本

[root@localhost cron.hourly]# cat /etc/cron.hourly/0anacron
#!/bin/sh
# Check whether 0anacron was run today already
if test -r /var/spool/anacron/cron.daily; then
    day=`cat /var/spool/anacron/cron.daily`
fi
if [ `date +%Y%m%d` = "$day" ]; then
    exit 0;
fi
 
# Do not run jobs when on battery power
if test -x /usr/bin/on_ac_power; then
    /usr/bin/on_ac_power >/dev/null 2>&1
    if test $? -eq 1; then
    exit 0
    fi
fi

/usr/sbin/anacron -s

/etc/cron.daily/腳本

/etc/cron.weekly/腳本

/etc/cron.monthly/腳本

 

時間表示法:

(1)  特定值

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

(2) *

給定時間點上有效取值范圍內的所有值

表示 “每

(3)  離散取值

#,#,#

(4)  連續取值

#-#

(5)  在指定時間范圍上, 定義步長

/#: #即為步長

時間格式

@reboot Run once after reboot. 啟動后執行

例:

@reboot root touch /app/reboot.log

@yearly 0 0 1 1 * 一年執行一次

@annually 0 0 1 1 * 一年執行一次

@monthly 0 0 1 * * 每月幾號

@weekly 0 0 * * 0 每周

@daily 0 0 * * * 每日

@hourly 0 * * * * 每時

 

示例:每3小時echowall 命令

0 */3 * * * centos /bin/echo “howdy!”;/usr/bin/wallwelcome to Magedu!

 

anacron系統

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

對筆記本電腦、臺式機、工作站、偶爾要關機的服務器及其它不一直開機的系統很重要對很有用

配置文件:

/etc/anacrontab ,負責執行/etc/ cron.daily  /etc/cron.weekly  /etc/cron.monthly 中系統任務。

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

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

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

字段4 :要執行的任務

/etc/cron.hourly/0anacron執行

當執行任務時,更新/var/spool/anacron/cron.daily文件的時間戳

 

管理臨時文件

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

[root@localhost ~]# cat /etc/cron.daily/tmpwatch
#! /bin/sh
flags=-umc
/usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \
-x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \
-X '/tmp/hsperfdata_*' -X '/tmp/.hdb*lock' -X '/tmp/.sapstartsrv*.log' \
-X '/tmp/pymp-*' 10d /tmp
/usr/sbin/tmpwatch "$flags" 30d /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
    if [ -d "$d" ]; then
/usr/sbin/tmpwatch "$flags" -f 30d "$d"
    fi
done

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

[root@localhost ~]# systemctl status systemd-tmpfiles-setup
   systemd-tmpfiles-setup.service - Create Volatile Files and Directories
   Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-setup.service; static; vendor preset: disabled)
   Active: active (exited) since Tue 2017-05-09 15:57:49 CST; 9h ago
     Docs: man:tmpfiles.d(5)
           man:systemd-tmpfiles(8)
 Main PID: 865 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/systemd-tmpfiles-setup.service
 
May 09 15:57:49 localhost.localdomain systemd[1]: Starting Create Volatile Files and Di.....
May 09 15:57:49 localhost.localdomain systemd[1]: Started Create Volatile Files and Dir...s.
Hint: Some lines were ellipsized, use -l to show in full.

配置文件:

/etc/tmpfiles.d/*.conf

/run/tmpfiles.d/*.conf

/usr/lib/tmpfiles/*.conf

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

/tmp 1777 root root 10d

/var/tmp 1777 root root 30d

命令:

systemd-tmpfiles clean|remove|create configfile

 

用戶cron

crontab 命令定義,每個用戶都有專用的cron 任務文件:/var/spool/cron/USERNAME

crontab 命令:

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

-l:列出所有任務;

-e:編輯任務;

-r:移除所有任務;

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

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

如果誤刪除,可通過/var/log/cron恢復

控制用戶執行計劃任務:

/etc/cron.{allow,deny}

 

at crontab

一次性作業使用 at

重復性作業使用crontab

Create   at  time crontab -e

List   at -l   crontab -l

Details   at -c jobnum N/A

Remove   at -d jobnum crontab -r

Edit   N/A   crontab -e

沒有被重定向的輸出會被郵寄給用戶

根用戶能夠修改其它用戶的作業

 

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

(1) COMMAND > /dev/null

(2) COMMAND &> /dev/null

對于cron 任務來講,% 有特殊用途;如果在命令中要使用%,則需要轉義,將%放置于單引號中,則可不用轉義

 

 

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

(0)
Linux.rookieLinux.rookie
上一篇 2017-05-13
下一篇 2017-05-13

相關推薦

  • 進程及任務管理

    進程概念 內核的功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等 Process: 運行中的程序的一個副本,是被載入內存的一個指令集合     進程ID(Process ID,PID)號碼被用來標記各個進程     UID、GID、和SELi…

    Linux干貨 2016-09-09
  • 第四周作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其他用戶均沒有任何訪問權限 答:     復制目錄:cp -R /etc/skel /home/tuser1     修改權限:chmod -R go=- /home/tuser1 2、編輯/etc/group文件…

    Linux干貨 2016-12-07
  • Bash的基礎特性(二)

    Bash的基礎特性(二) glob文件通配符 (* ; ? ; [ ] ; [^ ] ) 星號* 匹配任意所有字符的 [root@lyp ~]# ls h* hello.sh hello.shbak ?匹配單個字符 ls ???? 查看四個字符命名的文件 [0-9]匹配數字 [a-z] 字母 字母的順序安裝 a A b B c C… z Z 匹配的a-z […

    Linux干貨 2017-04-01
  • Apache Httpd負載均衡Tomcat并實現Session Sticky和Session Cluster

    Apache Httpd負載均衡Tomcat并實現Session Sticky和Session Cluster 前言 實驗拓撲 實驗步驟 安裝配置tomcat 安裝配置Apache Httpd并測試 實現session sticky 實現Session Cluster 總結 前言 上篇文章我們介紹如何構建一個LANMT平臺并搭建一個jspxcms, 這次我們…

    2016-04-22
  • 計算機的組成以及OS的發展歷程

        根據馮諾依曼提出的體系架構,計算機基本上可以分為五大部件。這五大部件分別為運算器,控制器,內存,輸入設備與輸出設備,其中運算器與控制器是CPU的重要組成部分。下面分別介紹這5大部件:     CPU:運算器、控制器、寄存器、緩存      &…

    Linux干貨 2016-10-30
  • Linux下的文件管理系統

    一、文件系統的FHS標準     因為Linux的屬于開源系統,開發人員多,為了統一開發標準,Linux有一個文件系統標準,也就是FHS(Filesystem HierarchyStandard)標準。有了這個標準,那些獨立的軟件開發商、系統開發人員以及系統的使用者就能方便的在系統上操作。 二、文件系統  &…

    Linux干貨 2016-08-02
欧美性久久久久