定时任务

Posted tcy1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了定时任务相关的知识,希望对你有一定的参考价值。

定时任务

为什么要用定时任务(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

给小哥哥写情书过程

  1. 安装mailx邮件服务
    技术图片

  2. 生成授权码,为发送qq邮件做准备
    技术图片

  3. 修改mailx配置文件,添加如下内容(光标所在内容为步骤一操作生成授权码)
    技术图片

  4. 针对配置文件内容,创建证书位置
    技术图片

  5. 进入证书目录,获取腾讯证书
    技术图片

  6. 首先给自己发一封邮件试试手
    技术图片

  7. 成功看到邮件

技术图片

  1. 创建几个情书文件(后来我将情书移动到了/tmp/666/目录下)
    技术图片

  2. 创建脚本
    技术图片

  3. 写定时任务(每分钟给我男神发信息)

技术图片

以上是关于定时任务的主要内容,如果未能解决你的问题,请参考以下文章

Celery实现定时任务crontab

以代码的方式管理quartz定时任务的暂停重启删除添加等

Laravel实现定时任务的示例代码

asp.net 定时器 定时执行任务

MySQL定时执行脚本(计划任务)实例

动态创建管理定时任务-已完成