Day17課堂筆記——定時任務(wù)

12.9 本章重點

1)Linux基本9位權(quán)限之文件和目錄權(quán)限詳細說明。

2)Linux基本9位權(quán)限之字符和數(shù)字(8進制)權(quán)限知識。

3)權(quán)限及用戶用戶組屬性修改命令chmod、chown、chgrp。

4)默認權(quán)限umask以及系統(tǒng)目錄安全案例。

5)特殊權(quán)限Suid知識掌握,Sgid和sticky知識了解即可。

1 sgid

1.1sgid的作用

就是讓普通用戶可以在執(zhí)行某個設(shè)置了sgid位的命令時,

擁有和命令對應(yīng)用戶組(一般為root用戶組)一樣的身份和權(quán)限(默認)。


sgid基于目錄的作用:讓不同的人創(chuàng)建文件屬于相同的用戶組,從而可以互相共享文件的權(quán)限。

例如:

locate搜索內(nèi)容,默認從updatedb對應(yīng)的數(shù)據(jù)庫中查找

updatedb 更新locate查找內(nèi)容對應(yīng)的數(shù)據(jù)庫。

[root@oldboyedu ~]# updatedb

[root@oldboyedu ~]#? ls -l /var/lib/mlocate/mlocate.db

-rw-r----- 1 root slocate 1977042 Oct? 8 00:47 /var/lib/mlocate/mlocate.db

[root@oldboyedu ~]# file /var/lib/mlocate/mlocate.db

/var/lib/mlocate/mlocate.db: data

2.linux定時任務(wù)

要想配置定時任務(wù),首先啟動crond

1、什么是定時任務(wù)?

周期性的執(zhí)行任務(wù)計劃的軟件,linux定時任務(wù)的常用軟件是crond.

2.使用定時任務(wù)軟件,可以每天,每小時按你需求重復(fù)執(zhí)行一項工作。

例如:備份? 都是0點以后,2點爬起來備份,4點以后睡覺。

解決:需要寫一個程序?qū)崿F(xiàn)自動備份,然后讓定時任務(wù)軟件幫你執(zhí)行。

定時任務(wù)軟件類似于鬧鐘。

3.怎樣用

(1)用戶定時任務(wù)計劃

在linux系統(tǒng)中,

cron是定時任務(wù)的軟件名

crond是服務(wù)進程名,真正實現(xiàn)定時任務(wù)服務(wù)。

crontab命令是用來設(shè)置定時任務(wù)規(guī)則的配置命令

要想配置定時任務(wù),首先啟動crond服務(wù)。

systemctl start crond.service

systemctl stop crond.service

systemctl status crond.service

開啟自啟動:

systemctl disable crond.service

systemctl enable crond.service

[root@oldboyedu ~]# systemctl status crond

● crond.service - Command Scheduler

? Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)

? Active: active (running) since Thu 2020-10-08 01:56:12 CST; 2min 26s ago

Main PID: 13189 (crond)

? CGroup: /system.slice/crond.service

? ? ? ? ? └─13189 /usr/sbin/crond -n

Oct 08 01:56:12 oldboyedu crond[13189]: (CRON) INFO (RANDOM_DELAY will be...)

Oct 08 01:56:12 oldboyedu systemd[1]: Started Command Scheduler.

Oct 08 01:56:12 oldboyedu crond[13189]: (CRON) INFO (running with inotify...)

Oct 08 01:56:12 oldboyedu crond[13189]: (CRON) INFO (@reboot jobs will be...)

Hint: Some lines were ellipsized, use -l to show in full.

2.系統(tǒng)定時任務(wù)計劃

(1)不用管理員干預(yù),系統(tǒng)自動執(zhí)行。

(2)也可以利用系統(tǒng)任務(wù)為管理員服務(wù)。

[root@oldboy ~]# ll /var/log/messages*

-rw-------. 1 root root? 96594 Mar 21 12:40 /var/log/messages

-rw-------. 1 root root 485249 Mar 20 10:46 /var/log/messages-20190320

[root@oldboy ~]# ll /var/log/secure*

-rw-------. 1 root root 1430 Mar 21 12:50 /var/log/secure

-rw-------. 1 root root 2695 Mar 20 10:46 /var/log/secure-20190320

[root@oldboyedu /etc/cron.daily]# ll /etc/cron.daily/logrotate? /etc/logrotate.conf

-rwx------. 1 root root 219 Oct 31? 2018 /etc/cron.daily/logrotate

-rw-r--r--. 1 root root 662 Jul 31? 2013 /etc/logrotate.conf

按天切割日志,就可以用logrotate。

1.3?crontab命令:

crontab命令是用來設(shè)置定時任務(wù)規(guī)則的配置命令

內(nèi)容存放在哪里了。定時任務(wù)內(nèi)容存放在/var/spool/cron/

當前用戶名作為文件名

-l l 列表 查看已經(jīng)設(shè)置的定時任務(wù)

-e 編輯定時任務(wù)

-u user 查看特定用戶下的定時任務(wù)

crontab -l === cat /var/spool/cron/root

crontab -e ==vim /var/spool/cron/root

1.4編寫定時任務(wù)的語法:

# 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)

共六列:

第一列:分 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

第六列:要執(zhí)行的任務(wù)命令或程序

特殊符號:

* 表示的 每或每一 的意思

00 23 * * * cmd

- 連續(xù)區(qū)間 1-10

00 8-23 * * * cmd

, 列舉 1,2,3,4,8

00 1,2,3,4,8 * * * cmd

/n n是數(shù)字。

n代表自然數(shù)字,即“每隔n單位時間”,例如:每10分鐘執(zhí)行一次任務(wù)可以寫成

*/10 * * * * cmd

實例:

命令實例1:*/1 * * * * /bin/sh /scripts/data.sh

在本例中除了數(shù)字與命令腳本外,還使用到了符號"*",*號的意思“每一”。

第一列的意思為分鐘,特殊符號“/”表示每隔的意思,即表示每隔一分鐘執(zhí)行/bin/sh /scripts/data.sh程序。

命令實例2:30 3,12 * * * /bin/sh /scripts/oldboy.sh

在本例中,第一列為30,表示30分鐘;第二列為 3,12,這代表3點及 12點,此定時任務(wù)的意思是每天凌晨3點和中午12點的半點時刻(或描述為每天凌晨3:30和中午12:30)執(zhí)行/scripts/oldboy.sh腳本。

命令實例3:30 */6 * * * /bin/sh /scripts/oldboy.sh

在本例中,第一列為30,表示30分鐘;第二列*/6代表每6個小時,也相當于 6、12、18、24 的作用。此定時任務(wù)的意思是每隔6個小時的半點時刻執(zhí)行/scripts/oldboy.sh腳本任務(wù)。

命令實例4:30 8-18/2 * * * /bin/sh /scripts/oldboy.sh

在本例中,其中的第一列為30,表示30分鐘;第二列8-18/2代表在早晨8點到下午18點之間每隔2小時,也相當于把8、10、12、14、16、18單獨列出。

那么,此定時任務(wù)的意思就是早晨8點到下午18點之間,每隔2小時的半點時刻執(zhí)行/scripts/oldboy.sh腳本任務(wù)。

命令實例5:30 21 * * * /application/apache/bin/apachectl graceful

本例表示每晚的21:30重啟apache。

命令實例6:45 4 1,10,22 * * /application/apache/bin/apachectl graceful

本例表示每月1、10、22日的凌晨4 : 45分重啟apache。

命令實例7:10 1 * * 6,0 /application/apache/bin/apachectl graceful

本例表示每周六、周日的凌晨1 : 10分重啟apache。

命令實例8:0,30 18-23 * * * /application/apache/bin/apachectl graceful

本例表示在每天18 : 00至23 : 00之間每隔30分鐘重啟apache。

命令實例9:00 */1 * * * /application/apache/bin/apachectl graceful

本例表示每隔一小時整點重啟apache

命令實例10:* 23,00-07/1 * * * /application/apache/bin/apachectl graceful

本例并不表示晚上23點和早上0-7點之間每隔一小時重啟Apache。

要說明的是,以上結(jié)果是不規(guī)范的,也是不對的。大家想想為什么?

以上定時任務(wù)的第一列為*,表示每分都執(zhí)行任務(wù)即晚上23點和早上0-7點之間每隔一小時的每分都重啟Apache,很可怕吧。

命令實例11:00 11 * 4 1-3 /application/apache/bin/apachectl graceful

本例表示4月的每周一到周三的上午11點整重啟Apache。

命令實例12:30 09 * * 0 去老男孩教育上課

本例表示每周日上午9:30去老男孩教育上課,這是周末班的上課頻率。

命令實例13:30 08 * * *去老男孩教育上課

本例表示每上午8:30去老男孩教育上課,這是脫產(chǎn)班的上課頻率。

通過上述13個例子,相信讀者已經(jīng)能夠理解定時任務(wù)的配置規(guī)則了。

實踐:

1、每分鐘追加一次oldboy字符串到/tmp/oldboy.log里。

解答:大象放冰箱分三步

a.命令行執(zhí)行成功。

[root@oldboyedu ~]# echo "oldboy">>/tmp/oldboy.log

[root@oldboyedu ~]# cat /tmp/oldboy.log

oldboy

[root@oldboyedu ~]# echo "oldboy">>/tmp/oldboy.log

[root@oldboyedu ~]# cat /tmp/oldboy.log

oldboy

oldboy

b.配置定時任務(wù)crontab -e 編輯配置

[root@oldboyedu ~]# crontab -l

#####

* * * * * echo "oldboy">>/tmp/oldboy.log

c.檢查

[root@oldboyedu ~]# tail -f /tmp/oldboy.log

oldboy

oldboy

oldboy

老男孩思想:

1)先輸入* * * * *

2)先命令行操作成功。

3)拷貝命令到定時任務(wù)編輯里。

范例13-2:讓服務(wù)器時間每5分鐘和互聯(lián)網(wǎng)時間做一次同步。

安裝時間服務(wù)軟件:yum install ntpdate -y

更新互聯(lián)網(wǎng)時間 /usr/sbin/ntpdate ntp1.aliyun.com

范例13-3:每天晚上0點,把站點目錄/var/www/html下的內(nèi)容打包備份到/data目錄下,并且要求每次生成不同的備份包名。

范例13-3:每天晚上0點,把站點目錄/var/www/html下的內(nèi)容打包備份到/data目錄下,并且要求每次生成不同的備份包名。

至少分三步:

1.命令行稿成功

準備工作:

[root@oldboyedu ~]# mkdir /var/www/html /data -p

具體命令:

[root@oldboyedu ~]# tar zcvf /data/html_$(date +%F).tar.gz /var/www/html/

tar: Removing leading `/' from member names

/var/www/html/

[root@oldboyedu ~]# ll /data

total 4

-rw-r--r-- 1 root root 117 Mar 22 11:59 html_2019-03-22.tar.gz

2、編寫定時任務(wù)

[root@oldboyedu ~]# crontab -l

00 00 * * * tar zcvf /data/html_$(date +%F).tar.gz /var/www/html/

錯了,不執(zhí)行。。。。

看報錯日志。。。錯誤日志

定時任務(wù)沒有執(zhí)行,出錯了日志在哪里?

出錯日志/var/log/cron

Mar 22 12:03:01 oldboyedu CROND[18770]: (root) CMD (tar zcvf /data/html_$(date +)

定時任務(wù)對%的要求,百分號要轉(zhuǎn)義。\%

正確答案:

[root@oldboyedu ~]# crontab -l

00 00 * * * tar zcvf /data/html_$(date +\%F).tar.gz /var/www/html/

優(yōu)秀的答案(企業(yè)里):

cd /var/www

tar zcf /data/html_$(date +%F).tar.gz ./html

2.盡量用腳本文件實現(xiàn)

#mkdir /server/scripts -p #存放腳本的文件

1.命令行執(zhí)行

cd /var/www

tar zcf /data/html_$(date +%F).tar.gz ./html

2.盡量用腳本文件實現(xiàn)

#mkdir /server/scripts -p #存放腳本的文件

2? /dev/null 黑洞設(shè)備

MH370>/dev/null

&>/dev/null 等價>/dev/null 2>&1

3.運維規(guī)范:

腳本位置:/server/scripts

軟件位置:/server/tools

編譯位置:/application/軟件名字-版本,然后要軟鏈接。

4.生產(chǎn)環(huán)境下的定時任務(wù)

要領(lǐng)1:為定時任務(wù)規(guī)則加必要的注釋

要領(lǐng)2:所有的定時任務(wù)都盡量都以腳本的形式執(zhí)行

要領(lǐng)3:在執(zhí)行的shell腳本前加上/bin/sh

要領(lǐng)4:定時任務(wù)中命令或腳本的結(jié)尾加>/dev/null 2>&1? (如果不加會產(chǎn)生垃圾,會把系統(tǒng)的indoe給存滿)

要領(lǐng)5:在指定用戶下執(zhí)行相關(guān)定時任務(wù)

要領(lǐng)6:生產(chǎn)任務(wù)計劃程序中不要隨意打印輸出信息,有輸出的想法去掉

要領(lǐng)7:定時任務(wù)執(zhí)行的腳本要存放到規(guī)范路徑下

要領(lǐng)8:配置定時任務(wù)要規(guī)范操作過程,減少出錯

要領(lǐng)9:定時任務(wù)腳本中程序命令及路徑盡量用全路徑

要領(lǐng)10:時間變量%號要用反斜線轉(zhuǎn)義(只有只是任務(wù)里是命令才需要)

要領(lǐng)11:若腳本中調(diào)用了系統(tǒng)環(huán)境變量,要重新定義

要領(lǐng)12:出錯或無法執(zhí)行,就檢查/var/log/cron日志

作業(yè):

1) 在每周6的凌晨3:15執(zhí)行/home/shell/collect.pl,并將標準輸出和標準錯誤輸出到/dev/null設(shè)備,請寫出crontab中的語句。

2) crontab在11月份內(nèi),每天的早上6點到12點中,每隔2小時執(zhí)行一次/usr/bin/httpd.sh,怎么實現(xiàn) ?

3) crontab文件由六個域組成,每個域之間用空格分割,其排列正確的為( )

A、MIN HOUR DAY MONTH YEAR COMMAND

? ? B、MIN HOUR DAY MONTH DAYOFWEEK COMMAND

? ? C、COMMAND HOUR DAY MONTH DAYOFWEEK

? ? D、COMMAND YEAR MONTH DAY HOUR MIN

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容