定時執行shell腳本,linux任務計劃不執行時間,Linux任務計劃、周期性任務執行

 2023-11-19 阅读 25 评论 0

摘要:Linux任務計劃、周期性任務執行內容簡要命令:mail,定時執行shell腳本,at, crontab相信每個人都有使用鬧鐘的習慣,我們設定鬧鐘的種類有很多。比如說,只提醒一次、工作日提醒、休息日提醒等。在設定鬧鐘之后,每天的設定時間都會按時的提醒你去做什

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

內容簡要命令:mail,

定時執行shell腳本,at, crontab

相信每個人都有使用鬧鐘的習慣,我們設定鬧鐘的種類有很多。比如說,只提醒一次、工作日提醒、休息日提醒等。在設定鬧鐘之后,每天的設定時間都會按時的提醒你去做什么事情,以免自己忘記一些重要的會議等事情。像這樣在每天特定的時間安排做一些事情。這樣一種事情我們就稱之為例行任務計劃。

其實在個系統平臺上都有類似的例行性任務計劃功能,那如何去像設定鬧鐘一樣在Linux系統之上指定例行性任務計劃。

crontab執行shell命令,我們先來看看任務計劃的分類:主要有兩種

一次性任務計劃:未來的某時間點執行一次某任務:at, batch:只執行一次就結束

周期性任務計劃:周期性運行某任務:crontab:每隔一定時間就去做相同的事情

shell腳本定時任務。執行結果:會通過郵件發送給用戶

~]# ?netstat

-tnlp

redis定時任務、~]# ss -tnl

本地電子郵件服務:

smtp:simple

shell 定時任務、mail transmission protocol

pop3:Post

Office Procotol

imap4:Internet Mail Access Procotol

mail命令:

mailx - send

and receive Internet mail

MUA:Mail

User Agent, 用戶收發郵件的工具程序;

r:回復

d: 刪除

a4c26d1e5885305701be709a3d33442f.png

mailx

[-s 'SUBJECT']

username[@hostname]

郵件正文的生成:mail查看郵件

(1)

交互式輸入;. 單獨成行可以表示正文結束;

(2)

通過輸入重定向;

~]# mail -s 'fstab file' root < /etc/fstab

(3) 通過管道;

~]# cat /etc/fstab | mail -s 'to you' jklte

a4c26d1e5885305701be709a3d33442f.png

at命令:

at是有atd服務提供的,在centos6

上可以使用service atd start來啟動服務:在centos7 上要使用sysemctl start

atd.service

at

[OPTION]... TIME

常用選項:

-l:查看作業隊列,相當于atq

-f /PATH/FROM/SOMEFILE:從指定文件中讀取作業任務,而不用再交互式輸入;

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

-c:查看指定作業的具體內容;

-q QUEUE:指明隊列;

注意:作業執行結果是以郵件發送給提交作業的用戶;

a4c26d1e5885305701be709a3d33442f.png

TIME:

HH:MM [YYYY-mm-dd] :如20:01

2016-11-9

noon,midnight, teatime

tomorrow

now+#

UNIT:minutes, hours, days, OR weeks

at的作業有隊列,用單個字母表示,默認都使用a隊列;

~]# at now

+3min

at> cat/issue

at> ls /var

at> echo "hello there"

Ctrl+d提交亦可;

a4c26d1e5885305701be709a3d33442f.png

問題:顯示Can't open /var/run/atd.pid

to signal atd. No atd running?

答:service atd

start(開啟atd)

例子:

實例1:三天后的下午 5 點鍾執行

/bin/ls

# at 5pm + 3 days

at> /bin/ls

at>

job 7 at 2016-01-08 17:00

實例2:明天17點鐘,輸出時間到指定文件內

# at 17:20 tomorrow

at> date > /root/doiido.log

at>

Job 8 at 2016-01-06 17:20

batch命令:

batch會讓系統自行選擇在系統資源較空閑的時間去執行指定的任務;

周期性任務計劃:cron,crontab

crontab是由crond服務提供的。

向crond提交作業的方式不同于at,它需要使用專用的配置文件,此文件有固定格式,不建議使用文本編輯器直接編輯此文件;要使用crontab命令;

服務程序:

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

確保crond守護進程(daemon)處于運行狀態:

CentOS

7:啟動服務

systemctl ?status

crond.service

Active: active (running) ... ...

CentOS

6:啟動服務

service ?crond

status

... is running.

1、cron任務分為兩類:

系統cron任務:主要用于實現系統自身的維護;

手動編輯:/etc/crontab文件

用戶cron任務:

命令:crontab命令

(1)系統cron的配置格式:/etc/crontab

a4c26d1e5885305701be709a3d33442f.png

注意:

(1)

每一行定義一個周期性任務,共7個字段;

*

* ?* ?*

* : 定義周期性時間

user-name :

運行任務的用戶身份

command to

be executed:任務

(2)

此處的環境變量不同于用戶登錄后獲得的環境,因此,建議命令使用絕對路徑,或者自定義PATH環境變量;

(3)

執行結果郵件發送給MAILTO指定的用戶

(2)用戶cron的配置格式:/var/spool/cron/USERNAME

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

# | ?|

| ?|

|

# * ?*

* ?* ?*

command to be executed

注意:

(1)

每行定義一個cron任務,共6個字段;

(2)

此處的環境變量不同于用戶登錄后獲得的環境,因此,建議命令使用絕對路徑,或者自定義PATH環境變量;

(3)

郵件發送給當前用戶;

時間表示法:

(1) 特定值;

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

注意:day of

week和day of month一般不同時使用;

(2) *

給定時間點上有效取值范圍內的所有值;表“每..”

(3) 離散取值:,

在時間點上使用逗號分隔的多個值;

#,#,#

(4) 連續取值:-

在時間點上使用-連接開頭和結束

#-#

(5)

在指定時間點上,定義步長:

/#:#即步長;

注意:

(1)

指定的時間點不能被整除時,其意義將不復存在;

(2)

最小時間單位為“分鐘”,想完成“秒”級任務,得需要額外借助于其它機制;

定義成每分鐘任務:而在利用腳本實現在每分鐘之內,循環執行多次;

示例:

(1) 3 * * *

*:每小時執行一次;每小時的第3分鐘;

(2) 3 4 * *

5:每周執行一次;每周5的4點3分;

(3) 5 6 7 *

*:每月執行一次;每月的7號的6點5分;

(4) 7 8 9 10

*:每年執行一次;每年的10月9號8點7分;

(5) 9 8 * *

3,7:每周三和周日;

(6) 0 8,20 * *

3,7:每周三和周日;8點整和20點整

(7) 0 9-18 * *

1-5:每周一到周五:9點正到18點正

(8) */5 * * *

*:每5分鐘執行一次某任務;

(9) */7

crontab命令:

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

[-i]

-e:編輯任務;自動打開人物編輯器

* * * * * /bin/echo ?"hello world"

-l:列出所有任務;

-r:移除所有任務;即刪除/var/spool/cron/USERNAME文件;

-i:在使用-r選項移除所有任務時提示用戶確認;

-u

user:root用戶可為指定用戶管理cron任務;

注意:運行結果以郵件通知給當前用戶;如果拒絕接收郵件:

(1) COMMAND

> /dev/null

(2) COMMAND

&> /dev/null

注意:定義COMMAND時,如果命令需要用到%,需要對其轉義;但放置于單引號中的%不用轉義亦可;

touch

file-$(date +%f-%H-%M-%S)

思考:某任務在指定的時間因關機未能執行,下次開機會不會自動執行?

不會!.

如果期望某時間因故未能按時執行,下次開機后無論是否到了相應時間點都要執行一次,可使用anacron實現;

anacron:

生產環境中的linux主機,通常都是全天、全年無休止的工作,同樣在其之上指定的任務計劃也需要每天、每周、固定時間去執行,如果沒有什么意外情況(比如斷電),那么任務就會按照設定的時間去執行,但是如果在某一周內系統發生了斷電情況,在恢復供電期間恰好有一些任務計劃要執行,此時任務計劃就失效了,當恢復供電后,系統需要等到下一個周期才能繼續執行此任務,也就意味著斷電期間的任務將失效。

但恰恰在這期間要執行的任務也非常重要,該怎么辦?有沒有手動去執行的方法嗎? 有!那就是

anacron

那么anacron如何知道Linux

系統何時關機的呢?anacron會記錄上次anacron執行的時間,anacron會去分析現在的時間與記錄上次運行anacron的時間,兩者比較后若發現有差異,那就是在某些時刻沒有進行計劃任務了,此時anacron就會開始運行未進行的crontab任務,所以anacron其實是通過crontab來運行的

anacron是一個程序,而非一個服務,anacron也有自己的配置文件/etc/anacrontaba。

練習:

1、每12小時備份一次/etc目錄至/backups目錄中,保存文件名稱格式為“etc-yyyy-mm-dd-hh.tar.xz”

2、每周2、4、7備份/var/log/secure文件至/logs目錄中,文件名格式為“secure-yyyymmdd”;

~]# mkidr

logs

~]# crontab

-e

0 1 * *

2,4,7 /bin/cp /var/log/secure /logs/secure-$(date

+%Y-%m-%d-%H-%M)> /dev/null

3、每兩小時取出當前系統/proc/meminfo文件中以S或M開頭的行信息追加至/tmp/meminfo.txt文件中;

~]# crontab

-e

0 */2 * * *

/bin/ grep "^[S,M]" /proc/meminfo

>>/tmp/meminfo.txt

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/182187.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息