day17-2019年3月22日
1)步骤拆分
2)框架思维
3)能复制粘贴就复制粘贴
定时任务
什么是定时任务?
周期性的执行任务计划的软件
crond
为什么要使用?
使用定时任务可以每天,每小时,按需求重复的执行一项工作
例如:备份 都是0点以后
需要写一个程序实现自动备份,然后让定时任务软件帮助执行
怎样使用?
(1)系统定时任务计划
1、不用管理员干预,系统可以自动执行
2、也可以利用系统任务为管理员服务
[root@oldboy_template-2 logrotate.d]#
[root@oldboy_template-2 logrotate.d]# ll /var/log/messages*
-rw------- 1 root root 1216088 Mar 22 10:10 /var/log/messages
-rw-------. 1 root root 1973890 Mar 20 09:46 /var/log/messages-20190320
[root@oldboy_template-2 logrotate.d]# ll /etc/cron.daily/logrotate /etc/logrotate.conf
-rwx------. 1 root root 219 Oct 31 03:12 /etc/cron.daily/logrotate
-rw-r--r--. 1 root root 662 Jul 31
sar 查看cpu使用情况
(1)用户定时任务计划
在Linux系统中
cron是定时任务的软件名,crond是服务进程名,crontab命令是用来设置定时任务规则的配置命令
要想配置定时任务,首先需要启动crond这个服务
[root@oldboy_template-2 logrotate.d]# systemctl status crond
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2019-03-22 08:26:30 CST; 1h 52min ago
Main PID: 6457 (crond)
CGroup: /system.slice/crond.service
└─6457 /usr/sbin/crond -n
Mar 22 08:26:30 oldboy_template-2 systemd[1]: Started Command Scheduler.
Mar 22 08:26:30 oldboy_template-2 crond[6457]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 1% if used.)
Mar 22 08:26:30 oldboy_template-2 crond[6457]: (CRON) INFO (running with inotify support)
crontab命令是用来设置定时任务规则
内容存放位置/var/spool/cron/用户名
以当前用户名作为文件名
-l list
-e edit
-u user
编写定时任务的语法:
# 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
特殊符号
* 每
- 连续区间
, 列举
/n n是数字
定时任务对%的要求,百分号要转义\%
一般调用脚本
mkdir /server/scripts -p
运维规范:
脚本位置:/server/scripts
软件位置:/server/tools
编译位置:/application/软件名字-版本-然后要软链接
命令行执行
/bin/sh /server/scripts/bak.sh 可以不加执行权限
1、命令行执行
cd /var/www
tar zcf /data/html_$(date +%F).tar.gz ./html
2、尽量用脚本文件实现
#mkdir /server/scripts -p #存放脚本的文件
cd /server/scripts
#cat bak.sh
tar zcf /data/html_$(date + %F).tar.gz ./html
命令行执行
/bin/sh /server/scripts/bak.sh
3、编辑定时任务
#bak html dir by wu at 20201111
00 00 * * * /bin/sh /server/scripts/bak.sh &>/dev/null
[root@oldboy /server/scripts]#crontab -l|tail -2
#bak html dir by oldboy at 20201111
00 00 * * * /bin/sh /server/scripts/bak.sh &>/dev/null
4、检查正式结果
[root@oldboy /server/scripts]#ls -l /data
要领:
为定时任务添加必要的注释(时间 人 地点 做了什么)
所有定时任务尽量用脚本实现
在脚本前加/bin/sh 防止脚本没有权限,导致无法执行
定时任务结尾注意添加 >/dev/null 2>&1
在指定用户下执行定时任务(用户权限最小化)
不要随意打印输出
定时任务要放在规范的目录下
规范操作过程,减少出错
执行命令全路径
时间变量%要反斜线转义(只有定时任务时需要)
若脚本中调用了系统环境变量,需要重新定义
出错或无法执行检查/var/log/cron日志文件
要领1:为定时任务规则添加必要的注释
要领2:所有的定时任务尽量都以脚本的形式执行
要领3:在执行的shell脚本前加上/bin/sh
要领4:定时任务中命令或脚本的结尾加>/dev/null 2>&1
要领5:在指定用户下执行相关定时任务
要领6:生产任务计划程序中不要随意打印输出信息,有输出的信息去掉
要领7:定时任务执行的脚本要存放到规范路径下
要领8:配置定时任务要规范操作过程,减少出错
要领9:定时任务脚本中程序命令及路径尽量用全路径
要领10:时间变量%号要用反斜线转义(只有定时任务里是命令时需要)
要领11:若脚本中调用了系统环境变量,要重新定义
要领12:出错或无法执行,检查/var/log/cron日志文件