3月22日第17天课堂笔记

sgid位:(针对目录)
sgid(setgid)位同样是通过S字符来标识,
但是,sgid位存在于基本权限的用户组权限位的x权限对应的位置,
如果用户组权限位对应的x权限位上有x权限,则sgid就用小写的s标识,
suid的s对应的数字权限为2,完整的权限用八进制数2000表示。

sticky(粘滞位)
sticky(粘滞)位通过字符T标识,存在于基本权限的其他用户位对应的x权限位上,
如果其他用户位的x权限位上有x权限,
则sticky(粘滞)位通过小写的t标识,对应的数字权限是1,
完整的权限用八进制数1000表示。

第十三章 系统定时任务Cron(d)服务应用实践

1、Linux系统定时任务:

1.1、什么是定时任务?
周期性的执行任务计划的软件,Linux定时任务的常用软件crond。

1.2、使用定时任务软件,可以每天,每小时按需求重复的执行一项工作。
例如:备份 都是0点以后,需要些一个程序实现自动备份,然后让定时任务软件帮你执行。类似闹钟。

1.3、怎样使用?
(1)系统定时任务计划
1、不用管理员干预,系统自动执行。
2、也可以利用系统服务为管理员服务。

图片1.png

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

(2)用户定时任务计划
在linux系统中,
cron是定时任务的软件名。
crond是服务进程名,真正实现定时任务的服务。
crontab命令是用来设置定时任务规则的配置命令。
要想配置定时任务,首先启动crond服务
systemctl start crond.strvice 开启
systemctl stop crond.strvice 停止
systemctl status crond.service 查看

开机自启动:
systemctl disable crond.service
sysremctl enable crond.service

2、crontab命令是用来设置定时任务规则的配置命令。

-l list 列表 查看已经设置的定时任务*
-e edit 编辑定时任务*
-u user 查看特定用户下的定时任务

定时任务内容存放的位置:/var/spool/cron/
以当前用户作为文件名

root:
Crontab -l=cat /var/spool/cron/root
Crontab -e=vim /var/spool/cron/root

3、编写定时任务的语法:

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)
第五列:周day of week (0-6)(Sunday=0 or 7) or sun,mon,tue,wed,thu,fri,sat
第六列:要执行的任务或程序

4、特殊符号:

* 表示“每或每一”的意思
00 23 * * * cmd

- 表示连续区间
00 8-23 * * * cmd

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

/n n是任意数字,即“每隔n单位时间”,例如:每10分钟执行一次任务,
*/10 * * * * cmd

命令实例1:/1 * * * * /bin/sh /scripts/data.sh 在本例中除了数字与命令脚本外,还使用到了符号"",*号的意思“每一”。 第一列的意思为分钟,特殊符号“/”表示每隔的意思,即表示每隔一分钟执行/bin/sh /scriptsdata.sh程序。

命令实例2:30 3,12 * * * /bin/sh /scriptsoldboy.sh 在本例中,第一列为30,表示30分钟;第二列为 3,12,这代表3点及 12点,此定时任务的意思是每天凌晨3点和中午12点的半点时刻(或描述为每天凌晨3:30和中午12:30)执行/scripts/oldboy.sh脚本。

命令实例3:30 /6 * * * /bin/sh /scripts/oldboy.sh 在本例中,第一列为30,表示30分钟;第二列/6代表每6个小时,也相当于 6、12、18、24 的作用。此定时任务的意思是每隔6个小时的半点时刻执行/scripts/oldboy.sh脚本任务。

命令实例4:30 8-18/2 * * * /bin/sh /scripts/oldboy.sh 在本例中,其中的第一列为30,表示30分钟;第二列8-18/2代表在早晨8点到下午18点之间每隔2小时,也相当于把8、10、12、14、16、18单独列出。 那么,此定时任务的意思就是早晨8点到下午18点之间,每隔2小时的半点时刻执行/scripts/oldboy.sh脚本任务。

命令实例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。 要说明的是,以上结果是不规范的,也是不对的。大家想想为什么? 以上定时任务的第一列为*,表示每分都执行任务即晚上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去老男孩教育上课,这是脱产班的上课频率。 通过上述13个例子,相信读者已经能够理解定时任务的配置规则了。

5、实践:

1、每分钟追加一次oldboy字符串到/tmp/oldboy.log里。
解答:大象放冰箱分三步
a.命令行执行成功。
[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.配置定时任务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)拷贝命令到定时任务编辑里。

2、让服务器时间每5分钟和互联网时间做一次同步。
安装时间服务软件:yum install ntpdate -y 更新互联网时间 /usr/sbin/ntpdatentp1.aliyun.com
[root@yuzhiwei/oldboy]# crontab -l
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null

/dev/null等价>/dev/null 2>&1 黑洞设备

3、每天晚上0点,把站点目录/var/www/html下的内容打包备份到/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、编写定时任务 [root@oldboyedu ~]# crontab -l 00 00 * * * tar zcvf /data/html_(date +%F).tar.gz /var/www/html/
错了,不执行。。。。
看报错日志。。。错误日志
定时任务没有执行,出错了日志在哪里?
出错日志/var/log/cron Mar 22 12:03:01 oldboyedu CROND[18770]: (root) CMD (tar zcvf /data/html_$(date +)

定时任务对%的要求,百分号要转义。%

正确答案:
[root@oldboyedu ~]# crontab -l 00 00 * * * tar zcvf /data/html_$(date +%F).tar.gz /var/www/html/

优秀的答案(企业里):
1.命令行执行 cd /var/www tar zcf /data/html_$(date +%F).tar.gz ./html
2.尽量用脚本文件实现 #mkdir /server/scripts -p #存放脚本的文件

运维规范:
脚本位置:/server/scripts
软件位置:/server/tools
编译位置:/application/软件名字-版本,然后要软链接。

cd /server/scripts
cat bak.sh
cd /var/www
tar zcf /data/html_$(date +%F).tar.gz ./html
命令行执行: /bin/sh /server/scriptsbak.sh
3、编辑定时任务 #bak html dir by oldboy at 2020108
00 00 * * * /bin/sh /server/scriptsbak.sh &>/dev/null
[root@oldboyedu /server/scripts]# crontab -l|tail -2
bak html dir by oldboy at 2020108
00 00 * * * /bin/sh /server/scripts/bak.sh &>/dev/null
4、检查正式结果 [root@oldboyedu /server/scripts]# ls -l /data

生产环境下的定时Cron书写要领
13.5.1 要领1:为定时任务规则加必要的注释
13.5.2 要领2:所有的定时任务尽量都以脚本的形式执行
13.5.3 要领3:在执行的Shell脚本前加上/bin/sh
13.5.4 要领4:定时任务中命令或脚本的结尾加>/dev/null 2>&1
13.5.5 要领5:在指定用户下执行相关定时任务
13.5.6 要领6:生产任务计划程序中不要随意打印输出信息,有输出的想法去掉。
13.5.7 要领7:定时任务执行的脚本要存放到规范路径下
13.5.8 要领8:配置定时任务要规范操作过程,减少出错
13.5.9 要领9:定时任务脚本中程序命令及路径尽量用全路径
13.5.10 要领10:时间变量%号要用反斜线转义(只有定时任务里是命令时需要)
13.5.11 要领11:若脚本中调用了系统环境变量,要重新定义
13.5.11 要领12:出错或无法执行,就检查/var/log/cron日志

你可能感兴趣的:(3月22日第17天课堂笔记)