linux的计划任务 - cron

查看cron是否启动

[root@localhost ~]# ps -aux | grep cron
root       807  0.0  0.0 126292  1604 ?        Ss   11:11   0:00 /usr/sbin/crond -n
root     16740  0.0  0.0 112712   964 pts/0    R+   19:39   0:00 grep --color=auto cron

创建计划任务

命令格式如下:

*  *  *  *  * command

第一个 * : minute (0-59)
第二个 * : hour(0-23)
第三个 * : day of month (1-31)
第四个 * : month (1-12)
第五个 * : day od week (0-6)
command  : 具体执行任务的命令 
创建方式
crontab -e

# 如: 每分钟在 /home 目录下创建一个以当前的年月日时分秒为名字的空白文件

*/1 * * * * touch /home/$(date +\%Y\%m\%d\%H\%M\%S)

说明
“ % ” 在 crontab 文件中,有结束命令行、换行、重定向的作用,前面加 “ \ ” 符号转义,
否则,“ % ” 符号将执行其结束命令行或者换行的作用,并且其后的内容会被做为标准输入发送给前面的命令

查看计划任务

[root@localhost ~]# crontab -l
*/1 * * * * touch /home/$(date +\%Y\%m\%d\%H\%M\%S)

查看cron是否已启动

ps -aux | grep cron
或者
pgrep cron

[root@localhost ~]# ps -aux | grep cron
root       807  0.0  0.0 126292  1604 ?        Ss   11:11   0:00 /usr/sbin/crond -n
root     17154  0.0  0.0 112712   964 pts/0    R+   19:47   0:00 grep --color=auto cron

查看执行结果

[root@localhost ~]# ll /home/
total 0
-rw-r--r-- 1 root root  0 Nov  6 19:48 20191106194801
-rw-r--r-- 1 root root  0 Nov  6 19:49 20191106194901
-rw-r--r-- 1 root root  0 Nov  6 19:50 20191106195001
-rw-r--r-- 1 root root  0 Nov  6 19:51 20191106195101
-rw-r--r-- 1 root root  0 Nov  6 19:52 20191106195201
-rw-r--r-- 1 root root  0 Nov  6 19:53 20191106195301
-rw-r--r-- 1 root root  0 Nov  6 19:54 20191106195401

查看执行日志

[root@localhost ~]# tail -f /var/log/cron
Nov  6 19:47:15 localhost crontab[17104]: (root) END EDIT (root)
Nov  6 19:47:35 localhost crontab[17141]: (root) LIST (root)
Nov  6 19:48:01 localhost CROND[17166]: (root) CMD (touch /home/$(date +%Y%m%d%H%M%S))
Nov  6 19:49:01 localhost CROND[17219]: (root) CMD (touch /home/$(date +%Y%m%d%H%M%S))
Nov  6 19:50:01 localhost CROND[17273]: (root) CMD (touch /home/$(date +%Y%m%d%H%M%S))
Nov  6 19:51:01 localhost CROND[17327]: (root) CMD (touch /home/$(date +%Y%m%d%H%M%S))
Nov  6 19:52:01 localhost CROND[17380]: (root) CMD (touch /home/$(date +%Y%m%d%H%M%S))
Nov  6 19:53:01 localhost CROND[17433]: (root) CMD (touch /home/$(date +%Y%m%d%H%M%S))
Nov  6 19:54:01 localhost CROND[17486]: (root) CMD (touch /home/$(date +%Y%m%d%H%M%S))
Nov  6 19:55:01 localhost CROND[17540]: (root) CMD (touch /home/$(date +%Y%m%d%H%M%S))

删除计划任务

# 删除任务计划
[root@localhost ~]# crontab -r
# 查看任务计划
[root@localhost ~]# crontab -l
no crontab for root

每个用户使用crontab -e 创建计划任务后,会在 /var/spool/cron/ 中添加一个该用户自己的计划任务文档,目的是为了隔离。

[root@localhost ~]# ll /var/spool/cron/
total 8
-rw------- 1 lee  lee  56 Nov  6 19:58 lee
-rw------- 1 root root 52 Nov  6 20:00 root

cron服务检测时间的最小单位是分钟,所以cron 会每分钟去读一次 /etc/crontab 和 /var/spool/cron/ 里的内容

[root@localhost ~]# ll /etc/ | grep cron
-rw-------   1 root root    541 Aug  9 07:07 anacrontab
drwxr-xr-x.  2 root root     21 Oct 14 16:11 cron.d
drwxr-xr-x.  2 root root     42 Mar  6  2019 cron.daily
-rw-------   1 root root      0 Aug  9 07:07 cron.deny
drwxr-xr-x.  2 root root     22 Oct 14 16:11 cron.hourly
drwxr-xr-x.  2 root root      6 Jun 10  2014 cron.monthly
-rw-r--r--.  1 root root    451 Jun 10  2014 crontab
drwxr-xr-x.  2 root root      6 Jun 10  2014 cron.weekly


上面的目录的作用:
/etc/cron.daily,目录下的脚本会每天执行一次,在每天的6点25分时运行;
/etc/cron.hourly,目录下的脚本会每个小时执行一次,在每小时的17分钟时运行;
/etc/cron.monthly,目录下的脚本会每月执行一次,在每月1号的6点52分时运行;
/etc/cron.weekly,目录下的脚本会每周执行一次,在每周第七天的6点47分时运行;

系统默认执行时间可以根据需求进行修改

举例1、备份日志

每天3点备份 /home/logs/user.log 文件到 /data/logs/目录下,并删除前一天的日志,备份的日志文件名是年-月-日的格式

执行:
crontab -e
0 3 * * * rm /data/logs/*
0 3 * * * cp /home/logs/user.log /data/logs/$(date +\%Y-\%m-\%d)

举例2、上传文件

每天2点通过sftp的方式上传一个文件到其他服务器上

编写执行脚本 upload.sh

#!/bin/bash
# SFTP配置信息
# IP
IP=10.20.0.101
# 端口
PORT=22
# 用户名
USER=lee
# 密码
PASSWORD=111111
# 需要上传的文件名 (文件名为user-前一天日期.csv   (如user-2019-11-07.csv))
FILE=user-$(date -d -1day +%Y-%m-%d).csv
# 需要上传的文件所在目录
CLIENTDIR=/home/
# 上传到目标服务器的目录
SEVERDIR=./share/

lftp -u ${USER},${PASSWORD} sftp://${IP}:${PORT} <<EOF
cd ${SEVERDIR}/
lcd ${CLIENTDIR}
put ${FILE}
by
EOF

创建计划任务

crontab -e
添加一下内容
0 2 * * * sh /home/uploadFile.sh
posted @ 2020-09-16 15:41  缘木与鱼  阅读(234)  评论(0编辑  收藏  举报