進程任務計劃管理

筆記

594ce33e9bf9a

任務計劃分為兩種:

? ? 第一種是一次性計劃at

? ? ? ? ? 第二種是周期性計劃crontab

一次性計劃任務:在未來的某個時間執行一次性計劃任務 at
rpm -ivh at-3.1.13-22.el7.x86_64.rpm 安裝at包
systemctl status atd 查看是不是running狀態,如果不是手動開啟
centos7 開啟 :systemctl start atd
centos6 開啟 :service atd start

at -V 顯示版本信息

[root@centos6 ~]#at 18:00 設置將來的一個時間
at> rm /data/* -rf 要執行的任務
at> <EOT> ? ? Ctrl+d 結束
job 1 at 2018-05-05 18:00 顯示有一個任務計劃在幾點幾分執行

at -l 查看任務計劃
1 2018-05-05 18:00 a root

at -c 1 :查看第1個任務計劃的內容

任務計劃被放在at目錄下的文件里面,重啟不會丟失
cat /var/spool/at/a000010183f558

[root@centos6 ~]#at now + 15minutes 在未來的15分鐘
at> wall class is over 發一個廣播
at> <EOT> ctrl+d結束
job 2 at 2018-05-05 15:56

查看任務計劃
[root@centos6 ~]#at -l
1 2018-05-05 18:00 a root
2 2018-05-05 15:56 a root

at -d 1 :刪除第一個任務計劃

-l 查看任務列表
-c 查看任務計劃內容
-d 刪除任計劃
-f 讀取任務文件
-m 強制發郵件

創建一個廣播文件
[root@centos6 ~]#cat > f1.txt
wall hello ha ha ha

在未來的一分鐘執行文件
[root@centos6 ~]#at -f ?f1.txt now + 1minutes
job 3 at 2018-05-05 15:50

如果計劃任務帶標準輸出,不會在當前終端顯示,但是它會以郵件的方式發給你,這樣就會造成大量的垃圾郵件,把標準輸出重定向到&> /dev/null ,就不會收到郵件

at -m 如果你不知道你的任務計劃執有沒有執行,就加一個-m強制發郵件,到你的郵箱

白名單和黑名單:可以規定哪個用戶可以執行計劃,哪個用戶不可以執行任務計劃
白名單 :/etc/at.allow 默認不存在,要創建,將用戶加入白名單
黑名單 :/etc/at.deny 默認存在 將用戶寫入文件,用戶就不能執行任務計劃

規則 :如果有白名單,只有白名單里面的用戶能執行任務計劃,其他用戶不能執行
? ? ? ? ? ? 如果沒有白名單,只有黑名單那只有黑名單里面的用戶不能執行任務計劃,其他用戶都可以

用腳本創建計劃任務
#!/bin/bash
at 18:00 <<end
rm /data/* -rf
end

 

? ?周期性計劃任務 cron
rpm -ivh /mnt/cdrom/Packages/cronie-1.4.11-17.el7.x86_64.rpm
centos7 :啟動服務 systemctl start crond
開機啟動 systemctl enable crond
centos6 :啟動服務 service crond start

rpm -ivh /misc/cd/Packages/cronie-anacron-1.4.4-16.el6_8.2.x86_64.rpm
補充工具,用于監控cronie任務執行情況,如果任務計劃在該執行的時間點沒有執行,則anacron會隨后啟動一次任務計劃
cat /etc/anacrontab

rpm -ivh /misc/cd/Packages/crontabs-1.10-33.el6.noarch.rpm
包括了和系統相關的輔助性計劃任務

/etc/crontab :屬于系統的關于任務計劃的配置文件,這個文件定義了計劃任務相關信息
[root@centos7 ~]#cat /etc/crontab
SHELL=/bin/bash :用的shell類型
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 … 一年12個月
# | | | | .—- day of week (0 – 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat 星期幾,也可以 1-5顯示星期一到星期五
# | | | | |
# * * * * * user-name command to be executed

* * * * *代表每分鐘,每小時,每天,每月,每星期

例:
52 16 * * * root wall hello
16點52分 每天 每月 每星期 root用戶 執行廣播

例:
1 17 * * * root tar zcvf /data/etc.tar.gz /etc/ &> /dev/null
5點01分 每天 每月 每星期 root用戶執行/etc/下的文件壓縮到data目錄下 ,并重定向到垃圾黑洞
標準輸出重定向到/dev/null ,不然會發送垃圾郵件

 

例:
16 17 1,10,20 * * root
1號,10號,20號,每月每星期17點16分 root用戶執行某程序

 

例:
16 17 1,10,20 * 0,6 root tar Jcvf /data/etc.tar.xz /etc/ &> /dev/null
1號,10號,20號或星期日和星期六17點16分 root用戶執行程序

 

例:

#!/bin/bash
ti=`date +%u` ? ?設置一個ti的變量
[ $ti -eq 6 -o $ti -eq 0 ] && wall hello ? 如果數字等于6會在0 會發送一個hello的廣播

chmod +x f2.sh
vim /etc/crontab
40 17 * * * root /root/f2.sh
星期六和星期日17點40執行f2.sh腳本,發送廣播

 

例:
#!/bin/bash
ti=`date +%u`
[ $ti -eq 6 -o $ti -eq 0 ] && wall hello

vim /etc/crontab
40 17 1,10,20 * * root /root/f2.sh
每月的1號10號20號并且星期日和星期六17:40執行程序

例:

vim /etc/crontab
* * * * * root f2.sh
root用戶每分鐘執行一次腳本

例:

vim /etc/crontab
1 * * * * root f2.sh
root用戶每小時的第一分鐘執行一次腳本

 

例:執行命令的間隔為秒
vim f3.sh
md0執行 命令
leep 20 休眠20秒
md20 執行命令
leep 20 休眠20秒
md30執行 命令

vim /etc/crontab
* * * * * root f3.sh
每20秒執行一次命令

 

usleep可以精確到微秒 1000000微秒等于一秒

@monthly root /root/f2.sh
每月1號執行一次文件

@reboot root /root/f2.sh
當重啟的時候執行某個操作

@hourly 一小時執行一次
@daily 一天執行一次
@weekly 一周執行一次
@monthly 一月執行一次
@annually 一年執行一次

cat /var/log/cron 日志記錄了當前發生的事件

 

每個單用戶創建任務計劃用 crontab
crontab -e 要創建計劃任務
* * * * * wall hello 每分鐘廣播一次 不需要寫用戶名

cat /var/spool/cron 計劃任務放在這個文件,在root用戶下可以查看和修改

在root用戶編輯普通用戶的計劃任務
crontab -l -u wang 查看wang用戶的計劃任務
crontab -e -u wang 編輯wang用戶的計劃任務
crontab -r -u wang 刪除wang用戶的計劃任務

單用戶的白名單和黑名單
白名單 :/etc/cron.allow 默認不存在,要創建,將用戶加入白名單
黑名單 :/etc/cron.deny 默認存在 將用戶寫入文件,用戶就不能執行任務計劃

在cron里面的%號有特殊含義,不能直接使用,寫在腳本里面直接調用

練習題
1、每周的工作日1:30,將/etc備份至/backup目錄中,保存的文件名稱格式
為“etcbak-yyyy-mm-dd-HH.tar.xz” ,其中日期是前一天的時間

vim time.sh
#!/bin/bash
date -d “-1 day” +%F-%H

chmod +x time.sh

vim /etc/crontab
05 21 * * * root tar Jcvf /data/etcbak-`. time.sh`.tar.xz /etc/

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

* */2 * * * cat /proc/meminfo |egrep “^(S|M)” >> /tmp/meminfo.txt

3、工作日時間,每10分鐘執行一次磁盤空間檢查,一旦發現任何分區利用率高
于80%,就執行wall警報

vim disk.sh
#!/bin/bash
disk1=`df |grep “sd” |sed -r “s/.*[ ]+([0-9]{1,3}).*/\1/” |sort -nr |head -n1`
disk2=`df -i |grep “sd” |sed -r “s/.*[ ]+([0-9]{1,3}).*/\1/” |sort -nr |head -n1`
[ $disk1 -ge 80 -o $disk2 -ge 80 ] && wall Disk over 80%

vim /etc/crontab
*/10 * * * 1-5 root disk.sh

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/97598

(0)
周亞飛周亞飛
上一篇 2018-05-06
下一篇 2018-05-06

相關推薦

欧美性久久久久