定时任务是永久的,延时任务是临时的。
系统延时任务
at 命令
- at命令可以指定某一任务在将来的特定时间运行。该作业可能是一次备份,对您系统的检查或者特定时间发送的通知。那些需要花费很长时间才可完成的作业正适合 at 命令。仅需使用 at 命令将任务设置为在一分钟或两分钟之后运行。然后您便可以安全注销 ,因为该任务会在与 shell 会话断开连接的情况下运行。
- at 命令必须指定任务应运行的时间。该指定可以是具体时间或日期( 例如星期一,10:00pm 或 7月15日),也可以是当前时间的相对时间 ( 现在时间加上 5 分钟 , 现在时间加上 3 天或 4:00pm 加上1 周 ) 。通过添加其他选项,您可以在任务完成是发送邮件 ( -m ),或者从文件中读取任务 ( -f 文件 ),而无需通过标准输入进行在键入 at 命令行之后,按 Enter 并继续键入作业中包含的其他命令。任务可由多个命令组成。在完成键入要运行的命令时 , 在单独出现的一行中按 Ctrl+d 完成任务。
[root@station mnt]# at 03:59 任务执行时间
at> touch /mnt/file{1..6} 任务
at> <EOT> Ctrl+D结束指定
job 3 at Mon May 6 03:59:00 2019 延时任务编号/执行时间等信息
[root@station mnt]# at now+1min
at> rm -fr /mnt/*
at> <EOT>
job 4 at Mon May 6 04:06:00 2019
at -l | 查看任务列表 |
---|---|
at -c 任务编号 | 查看任务内容 |
at -r 任务编号 | 取消任务 |
延时任务的黑白名单
- 黑名单
vim /etc/at.deny
在黑名单中写入用户westos,然后切换到westos用户,发现westos没有设置延时任务的权限。
我们切换到student用户,为student设置延时任务,虽然student有设置延时任务的权限,但是在/mnt下设置的延时任务并没有执行,这是因为student对目录本身没有写的权限。
要解决这个问题,我们在超户下更改/mnt的权限就可以了。
- 白名单
系统中默认没有白名单,我们要按照黑名单的格式新建一个白名单vim /etc/at.allow
注意:白名单如果存在,则黑名单不被读取,如果黑白名单都写了westos用户,那么黑名单失效,westos是唯一可以创建延时任务的用户。
系统定时任务
crontab -e | 创建定时任务 |
---|---|
crontab -l | 查看定时任务 |
crontab -r | 取消定时任务 |
设置定时任务之前,我们先查看定时任务的服务是否开启。systemctl status crond.service
,关闭的情况下所有设置的任务都不执行。
通过man 5 crontab命令可以查看定时任务的设置格式
The time and date fields are:
field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sunday, or use names)
例如:
* * * * * | 表示每分钟 |
---|---|
*/2 * * * * | 表示每两分钟 |
*/2 09,17 * * * | 早9 晚五,每两分钟 |
*/2 09-17 * * * | 早9到晚五,每两分钟 |
*/2 09-17 1 * * | 每月1号的早上9点到下午5点,每两分钟 |
*/2 09-17 1 3 * | 每年3月1号的早上9点到下午5点,每两分钟 |
*/2 09-17 1 3 4 | 每年3.1号的9-17点,以及3月的每周四的9-17点。是两个条件,星期和月份是或者的关系 |
crontab -e -u student ##为student创建定时任务
crontab -l -u student ##查看student的定时任务
crontab -r -u student ##取消定时任务
cron注意:1.属于系统的任务通常保存在 /etc/crontab 文件中而不是使用crontab -e 编辑保存在个人文件中。更好的做法是用文本编辑器创建 crontab 文件并保存到 /etc/cron.d 中 ( 避免更新系统软件包 cronie 时出现问题 ) 。
2.有时超级用户给普通用户设定的定时任务执行失败,原因有可能是普通用户对要操作的文件或目录没有执行权限。
定时任务的黑白名单
- 黑名单
vim /etc/cron.deny
文件中加入用户名,用户不可再进行定时任务的设置。
我这里黑名单中写了student
- 白名单
vim /etc/cron.allow
中写入用户名,除此用户外的其他任何用户都不可以执行定时任务。
脚本执行定时任务
vim /etc/cron.d/westos 中写入
* * * * * root run-parts /westos
mkdir /westos
vim /westos/test.sh 中写入
#!/bin/bash
touch /mnt/file{1..3}
chmod +x /westos/test.sh ##给脚本加执行权限
此脚本每整分都会自动执行一次。
临时文件
- 系统中服务在正常运行时会产生临时文件。
- 在系统中 /usr/lib/tmpfiles.d/ 标识服务的临时文件存放位置。
cd /usr/lib/tmpfiles.d/ ##临时文件存放位置
vim westos.conf ##后缀必须为.conf
d /mnt/westos 777 root root 10s
d文件类型 /mnt/westos表示要执行的文件 777表示对文件授予满权限 所有人所有组为root
systemd-tmpfiles --create /usr/lib/tmpfiles.d/* ##创建westos.conf中写的目录/mnt/westos
touch /mnt/westos/file1
systemd-tmpfiles --clean /usr/lib/tmpfiles.d/* ##清理目录下的失效文件