计划任务at、crontab

一、at一次性计划任务

格式:

at + 时间  命令

安装at

# yum install at -y

如果执行at命令时,出现一下情况

Can't open /var/run/atd.pid to signal atd. No atd running?

解决办法:

# chkconfig --level 35 atd on

# service atd start

普通用户也能够做计划任务

at+未来时间

# at 2018-11-11

Ctrl + d结束所要添加执行的命令

24进制的时间

# at 10:00 2018-11-11

# at 21:20 2018-11-11

12进制时间

# at 11am 2018-11-11

# at 9:10pm 2018-11-11

days天

# at 10am+10days

weeks周

# at 10am+10weeks

两小时后执行任务

#at now+2hours

查看计划任务

两种方法

#atq

#at -l

 

查看具体的计划任务的内容

 # cd /var/spool/at/

# ls

# cat a0000301882038

删除计划任务

两种方法

# atrm 3

# at -d 8

一次删除多个计划任务

# atrm {11..14}

凡是在at.deny中的是不允许做计划任务的,默认为空(黑名单)

# vi /etc/at.deny 

默认不存在,需要创建。允许做计划任务(白名单)

# vi /etc/at.allow

 二、crontab周期性计划任务

查看服务状态

# service crond status

# systemctl status crond

停止crontab定时任务执行

# service crond stop

# systemctl stop crond

开启crontab定时任务执行

# service crond start

# systemctl start crond

查看计划任务

crontab的语法规则格式:

代表意义 分钟 小时 日期 月份 命令
数字范围 0~59 0~23 1~31 1~12 0~7 需要执行的命令

周的数字为 0 或 7 时,都代表“星期天”的意思。

另外,还有一些辅助的字符,大概有下面这些:

特殊字符 代表意义
*(星号) 代表任何时刻都接受的意思。举例来说,0 12 * * * command 日、月、周都是*,就代表着不论何月、何日的礼拜几的12:00都执行后续命令的意思。
,(逗号) 代表分隔时段的意思。举例来说,如果要执行的工作是3:00与6:00时,就会是:0 3,6 * * * command时间还是有五列,不过第二列是 3,6 ,代表3与6都适用
-(减号) 代表一段时间范围内,举例来说,8点到12点之间的每小时的20分都进行一项工作:20 8-12 * * * command仔细看到第二列变成8-12.代表 8,9,10,11,12 都适用的意思
/n(斜线) 那个n代表数字,即是每隔n单位间隔的意思,例如每五分钟进行一次,则:*/5 * * * * command用*与/5来搭配,也可以写成0-59/5,意思相同

大致范围如下图:

编辑计划任务

# crontab -e

#分/分钟        时/几点         天/几号         月/几月份       周/星期几       命令
#如何不考虑某个时间单位的话,那么可以用*来表示,有“每”的意思
 0              7               *               *               *               /bin/aa.sh
 0,5,10         7               *               *               *               /bin/aa.sh
 0,5,10         7               *               *               1-5             /bin/aa.sh
 0,5,10         7               *               *               1-5/1           /bin/aa.sh
#   /5 每次递增5
 0-10/5         7               *               *               1-5             /bin/aa.sh
 0-10/5,30      7               *               *               1-5             /bin/aa.sh

#----------------------------------------------------------------------------------------
 0              7               *               1-3             1-5             /bin/aa.sh
 0              7               1-10            1-3             *               /bin/aa.sh
#分、时、月、周是and的关系
#分、时、天、月也是and的关系
 0              7               1-10            1-3             1-5             /bin/aa.sh
#天和周是or的关系,满足一个条件即可


#如果遇到一个比较复杂的问题,那么把他拆成几个简单的问题就行了
#例如
#让你写一个计划任务:每个月最后一天执行/aa.sh
 0              2               31              1,3,5,7,8,10,12 *               /bin/aa.sh

 计划任务保存位置

# cat /var/spool/cron/root

删除计划任务

# crontab -r

# crontab -l

系统中存在的计划任务

# ls /etc/cron*

 

凡是在at.deny中的是不允许做计划任务的,默认为空(黑名单)

# vi /etc/cron.deny 

默认不存在,需要创建。允许做计划任务(白名单)

# vi /etc/cron.allow

例子:

#每天早上6点10分
10 6 * * * date

#没两个小时
0 */2 * * * date

#晚上11点到早上8点之间每2个小时,早上8点
0 23-7/2,8 * * * date

#每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4 * mon-wed date

#1月份一号早上4点
0 4 1 jan * date

管理系统临时文件

临时文件存放位置

/tmp/不能删除该目录

# systemctl list-unit-files | grep tmpfile

systemd-tmpfiles-setup.service这个服务定期读取一下三个目录

 # ls /usr/lib/tmpfiles.d/

 # ls /run/tmpfiles.d/

# ls /etc/tmpfiles.d/

优先级从上到下依次增高,最后不要去动上面两个里面的内容

 创建aa.conf

使aa.conf生效

# systemd-tmpfiles --create aa.conf

# systemd-tmpfiles --clean aa.conf

 

 # cd /usr/lib/systemd/system

# vi systemd-tmpfiles-clean.timer 

 

[Unit]
Description=Daily Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

#当我们的系统运行15分钟或者说systemd服务运行15分钟之后, 就会执行systemd-tmpfiles这个命令

#如果系统没有重启,每隔一天执行这个命令

参考博客:

crontab的语法规则格式(每分钟、每小时、每天、每周、每月、每年定时执行 规则)

https://blog.csdn.net/xinyflove/article/details/83178876

原文地址:https://www.cnblogs.com/djlsunshine/p/9940540.html