linux计划任务
计划任务
做一些周期性的任务,在生产中主要定时备份数据
任务调度级别分为:
- 用户任务调度
- 系统任务调度
计划任务的方式分为两种
- at ----- 突发性,临时决定的,只执行一次的任务
- arontab ----- 定时性,例行,每隔一定的周期重复执行
at
安装at
[root@localhost ~]# yum install at
启动atd服务
[root@localhost ~]# systemctl start atd
[root@localhost ~]# systemctl status atd
● atd.service - Job spooling tools
Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2019-06-01 20:19:06 CST; 4s ago
Main PID: 7404 (atd)
设置atd任务
[root@localhost ~]# at 12:35
at> mkdir /opt/hhh
at> <EOT>
job 4 at Sat Jun 1 12:35:00 2019
处通过ctrl+d保存退出
设置atd任务的其他指定时间方式
at 20:00 2018-10-1 在某一天
at now +10min 在10分钟之后执行
at 17:00 tomorrow 明天下午5点执行
at 6:00 pm +3 days 在三天以后的下午6点执行
查看是否生效
[root@localhost ~]# date
Sat Jun 1 12:34:47 CST 2019
[root@localhost ~]# ls /opt/
[root@localhost ~]# date
Sat Jun 1 12:35:17 CST 2019
[root@localhost ~]# ls /opt/
hhh
查看所有任务(atq | at -l)
[root@localhost ~]# at 20:00 2019-06-01
at> mkdir /opt/test
at> <EOT>
job 7 at Sat Jun 1 20:00:00 2019
[root@localhost ~]# atq
7 Sat Jun 1 20:00:00 2019 a root
[root@localhost ~]# at -l
7 Sat Jun 1 20:00:00 2019 a root
查看具体任务的内容,需要使用上面查看的编号
[root@localhost ~]# at -c 7
...
${SHELL:-/bin/sh} << 'marcinDELIMITER11f8e4d7'
mkdir /opt/test
marcinDELIMITER11f8e4d7
或者可以查看这些任务存放位置(没有执行过的任务)
/var/spool/at/
删除计划任务
[root@localhost ~]# atrm 7
[root@localhost ~]# atq
[root@localhost ~]#
crontab
启动服务
[root@localhost ~]# systemctl start crond
[root@localhost ~]# systemctl status crond
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2019-06-01 19:49:40 CST; 6h left
Main PID: 3933 (crond)
常用参数
crontab -e 编辑cron任务
crontab -r 删除cron任务
crontab -u mk 指定mk用户的cron服务
crontab -l 列出当前用户的cron服务的详细内容
crontab -u root -l 列出指定用户的cron计划任务
crontab -u mk -r root删除mk用户的cron计划任务
-e编辑时的语法
1 | 2 | 3 | 4 | 5 | 6 | |
---|---|---|---|---|---|---|
符号 | * | * | * | * | * | * |
解释 | 分钟 | 小时 | 几号 | 月份 | 星期几 | command |
取值范围 | 0-59 | 0-23 | 1-31 | 1-12 | 0-6 | command |
特殊符号含义
符号 | 含义 | 举例 |
---|---|---|
* | 代表取值范围内的任意数字 | 任意 / 每一天 |
/ | 指定时间的间隔频率 | */10 |
- | 代表从某个数字到某个数字 | 8-17 |
, | 分开离散的几个数字 | 6,12-18,21 |
测试:
每分钟写入hhhh到该文件
[root@localhost ~]# crontab -e
* * * * * echo "hhhh" >> /opt/echo.txt
过一段时间查看
[root@localhost ~]# cat /opt/echo.txt
hhhh
hhhh
每天凌晨2点1分备份数据
[root@localhost ~]# crontab -e
1 2 * * * tar zcvf /opt/grub2.tar.gz /boot/grub2
指定用户查看计划任务
[root@localhost ~]# crontab -u root -l
1 2 * * * tar zcvf /opt/grub2.tar.gz /boot/grub2
* * * * * echo "hhhh" >> /opt/echo.txt
如果别人通过某一个用户写入计划任务,但是我们不知道是哪一用户,该如何排查呢
[root@localhost ~]# crontab -u bin -e
所有用户的计划任务,都会在/var/spool/cron/下产生相应的文件
[root@localhost ~]# ls /var/spool/cron/
bin root
系统级别的计划任务
系统任务调度的配置文件
/etc/crontab
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 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
可以在文件后加入
* * * * * root echo "hhhh" >> /opt/echo.txt
/etc/cron.d/ 是系统自动定期需要做的任务,但是又不是按照小时,天,星期,月来执行的,那就放在这个目录下面
cron.deny 控制