定时任务
定时任务
为什么要用定时任务(crond)
## 为什么要用crond?
计划任务主要是做一些周期性的任务,比如: 凌晨3点定时备份数据。或11点开启网站抢购接口,12点关闭抢占接口。计划任务主要分为以下两种使用情况:
## 1.系统级别的定时任务
临时文件清理
系统信息采集
日志文件切割
## 2.用户级别的定时任务
定时向互联网同步时间
定时备份系统配置文件
定时备份数据库的数据
定时任务配置文件
FBI WARNING:PATH 出现的目录,下面可执行文件,都可以不加路径直接执行。
[root@qls ~]# vi /etc/crontab
# 定时任务的shell
SHELL=/bin/bash
# 环境变量
PATH=/sbin:/bin:/usr/sbin:/usr/bin
# 如果定时任务执行报错,会给root用户发邮件
MAILTO=root
# 定时任务日志文件
/var/log/cron
# crontab -e 文件保存地址(root为指定用户,如为abc的用户创建定时任务,这里需要对应修改)
/var/spool/cron/root
写定时任务的潜规则:
- 1.所有命令是用绝对路径
- 2.复杂命令或者多个命令,尽量写到脚本中执行
- 3.定时任务中,所有的输出内容全部放到/dev/null
- 4.给定时任务注释
crontab命令
选项 | 作用 |
---|---|
-e | edit 编辑定时任务 |
-l | list 查看定时任务 |
-r | remove 删除当前用户的定时任务 |
-u | 指定用户 |
crontab -e # 此处编辑的定时任务,会自动存储到下方路径中,两者是相等的
vim /var/spool/cron/$USER
crontab -l # 列出所有定时任务
crontab -l -u tcy # 删除tcy用户创建的定时任务
crontab -r -u tcy # 删除tcy用户的定时任务
# 启动方式
# C6:
/etc/init.d/crond start # 定时任务,服务启动和停止(默认此服务就是开启的)
/etc/init.d/crond stop
# C7
systemctl start crond
systemctl stop crond
# 第一个定时任务
crontab -e
# 每五分钟跟阿里云同步一次系统时间 日期:xxx 谁:xxx
*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com &>/dev/null
定时任务语法
# 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
# | | | | |
# * * * * * user-name command to be executed
分 时 日 月 周
* * * * * ls
0-59 0-23 1-31 1-12 0-6(1-7) 周日:0或7 command
# 每天凌晨两点执行 ls 命令
00 02 * * * /bin/ls
# 每个月的1号凌晨2点执行ls命令
00 12 1 * * /bin/ls
# 每月1号和15号12点都行一次ls命令
00 12 1,15 * * /bin/ls
# 每月1号到15号12点都行一次ls命令
00 12 1-15 * * /bin/ls
# 每年的2月14号的凌晨2点,执行ls命令
00 02 14 2 * /bin/ls
# 每周日的凌晨两点执行ls命令
00 02 * * 7 /bin/ls
# 每年6月份的所有周五凌晨2点执行ls命令
00 02 * 6 5 /bin/ls
# 每个月的14号刚好是周日,那么就在凌晨2点执行ls命令
00 02 14 * 7 /bin/ls
# 哪一年2月14日刚好是周日,那么在凌晨2点执行ls命令
00 02 14 2 7 /bin/ls
# 每天的凌晨2点钟,每十分钟执行一次ls
*/10 02 * * * /bin/ls
# 每分钟执行一次 ls
* * * * * /bin/ls
# 每分钟执行一次 ls
*/1 * * * * /bin/ls
# 每年的2月14日00点执行ls命令
00 00 14 2 * /bin/ls
# 每5分钟执行一次ls命令
*/5 * * * * /bin/ls
# 每年的1月和5月和8月的每天晚上凌晨2点执行ls命令
00 02 * 1,5,8 * /bin/ls
1月1日,2
1月2日,2
...
1月31日,2
5月1日,2
...
5月31日,2
8月1日,2
...
8月31,2
# 每年的1月到7月和9月到12月的每天凌晨2点执行ls命令
00 02 * 1-7,9-12 * /bin/ls
1月1 - 31日,2
2月1 - 28,2
3月1 - 31日,2
4月1 - 30日,2
5月1 - 31日,2
6月1 - 31日,2
7月1 - 31日,2
9月1 - 31日,2
10月1 - 30日,2
11月1 - 30日,2
12月1 - 31日,2
# 每个月的1号到8号的凌晨2点执行
00 02 1-8 * * /bin/ls
1月1 - 8日,2
2月1 - 8日,2
3月1 - 8日,2
4月1 - 8日,2
5月1 - 8日,2
6月1 - 8日,2
7月1 - 8日,2
8月1 - 8日,2
9月1 - 8日,2
10月1 - 8日,2
11月1 - 8日,2
12月1 - 8日,2
# 每天晚上21点整,执行ls命令
0 21 * * * /bin/ls
# 每个月的1号和10号和22号的凌晨4点45分执行ls命令
45 4 1,10,22 * * /bin/ls
# 每个月的1号到10的凌晨4点45分执行ls命令
45 4 1-10 * * /bin/ls
# 每个月的每2天的8点到11点的3分和15分执行ls命令
3,15 8-11 */2 * * /bin/ls
保存时间:2020年4月26日 11点35分
4月28号,8点03分 和 8点15分,9点03分 和9点15分 , 10点03分和10点15分,11点03分和11点15分执行ls命令
4月30号
5月1号
5月3号
# 每天的00点-7点的每个小时和23点-00点的每个小时都执行ls命令
0 23-7/1 * * * /bin/ls
# 每周一到周五的晚上21点15分执行ls命令
15 21 * * 1-5 /bin/ls
发情书给小姐姐
# 1.配置服务器发邮件(安装发邮件服务)
[root@qls ~]# yum install -y mailx
# 2.修改mail的配置文件
[root@qls ~]# vim /etc/mail.rc
#发件人
set from=253097001@qq.com
#邮件服务器
set smtp=smtp.qq.com
#发件人用户名
set smtp-auth-user=253097001@qq.com
#发件人密码(QQ邮箱不可以使用密码,只能使用授权码)
set smtp-auth-password=xxxx
#登录方式
set smtp-auth=login
#邮件服务器协议及端口
set smtp=smtps://smtp.qq.com:465
#忽略证书
set ssl-verify=ignore
#指定证书位置
set nss-config-dir=/root/.certs
############################# 手动创建证书目录
mkdir -p /root/.certs
## 进入证书目录
cd /root/.certs
## 获取腾讯证书
echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -L -d /root/.certs
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ~/.certs -i ~/.certs/qq.crt
#将所有情书,移动到该目录下
[root@tcy ~]# mv qingshu* qingshu_dir/
#编写脚本
[root@tcy ~]# vim send_mail.sh
#!/bin/bash
qs_name=`ls -1 /root/qingshu_dir/|head -1`
cat /root/qingshu_dir/${qs_name} |mail -s '致我最爱的小姐姐' 1213261357@qq.com
if [ $? -eq 0 ];then
rm -f /root/qingshu_dir/$qs_name
fi
crontab -e
# 每天5:20发情书给小姐姐
20 05 * * * /bin/sh /root/send_lovebook.sh &>/dev/null
给小哥哥写情书过程
-
安装mailx邮件服务
-
生成授权码,为发送qq邮件做准备
-
修改mailx配置文件,添加如下内容(光标所在内容为步骤一操作生成授权码)
-
针对配置文件内容,创建证书位置
-
进入证书目录,获取腾讯证书
-
首先给自己发一封邮件试试手
-
成功看到邮件
-
创建几个情书文件(后来我将情书移动到了/tmp/666/目录下)
-
创建脚本
-
写定时任务(每分钟给我男神发信息)