Linux之计划任务

计划任务

操作内容:计划任务的查询(atq、at -c 号码)、新增(at 时间)、删除atrm。

计划任务的主要参数:什么时间,执行什么任务。想一下你在手机上定闹钟会做些什么操作?

有经验的系统运维工程师能够让系统自动化运行,无需人工的干预就可以让各个服务、命令在指定的时间段运行、停止。

实际上这些操作都是由系统的计划任务功能完成的,而计划任务又分为“一次性”与“长期性”之分。

如果某个命令仅仅要执行一次,那么可以使用at命令,这个指令实际上就是atd这个服务,所以一定要启动这个服务基本上at是默认打开的,输入at这个动作会将工作流写入/var/spool/at这个目录,然后等待系统执行他,此外,at是默认所有人都能之执行,使用/ect/at.allow(白名单)和/etc/at.deny(黑名单)可以进行限制。

一次性调度执行at

作用: 计划任务主要是做一些周期性的任务,目前最主要的用途是定期备份数据

参数 作用
man at 查看at命令的帮助文档
at <时间> 安排一次性任务
at <时间> -f 文件名 -f是file的缩写,在指定的时间执行“文件中的命令”
atq或at -l 查看任务列表
at -c 序号 预览任务与运行环境
atrm 序号 删除任务

[root@ever ~]# yum -y install at

[root@ever ~]# systemctl start atd

[root@ever ~]# systemctl enable atd

语法格式:

at

now +5min

teatime tomorrow (teatime is 16:00)

noon +4 days

5pm august 3 2018

[root@ever ~]# at now +1min

at> useradd uuuu

at>

job 1 at Sat Mar 21 22:34:00 2015

[root@yang ~]# atq

3 Thu Mar 30 09:55:00 2017 a root

[root@ever ~]# id uuuu

删除at的一次性计划任务

[root@kvm1 ~]# atrm 2

[root@kvm1 ~]# rm -rf /var/spool/at/a0000301861c20

[root@yang ~]# vim at.jobs

useradd u99

useradd u00

touch /date +%F.txt

[root@yang ~]# at now +1min < at.jobs

[root@ever ~]# useradd jack -G wheel

[root@ever ~]# visudo

Allows people in group wheel to run all commands

%wheel ALL=(ALL) ALL

Same thing without a password

%wheel ALL=(ALL) NOPASSWD: ALL

[root@ever ~]# su - jack

[jack@ever ~]$ sudo useradd yy

以sudo 用户jack创建at任务

[jack@ever ~]$ vim jack.at

sudo useradd u200

sudo useradd u300

sudo touch /home/date +%F_jack.txt

[jack@ever ~]$ at now +1min < jack.at

注: sudo执行需要考虑tty问题,没有终端不执行

[root@ever ~]# visudo

Defaults !visiblepw

at中的Time时间表示方法

时间 例子 说明

Minute:at now +5 minutes 任务在5分钟后运行

Hour: at now +1 hour 任务在1小时后运行

Days: at now +3 days 任务在3天后运行

Weeks: at now +2 weeks 任务在两周后运行

Fixed: at midnight 任务在午夜运行

Fixed: at 10:30pm 任务在晚上10点30分开始

Fixed: at 1:00 12/20/2004 任务在2004年12月20日凌晨1点开始

Fixed

: at 1:00 2017-05-03 任务在2017年05月03日凌晨1点开始

直接用echo语句将要执行的命令传送给at命令:

[root@sky ~]# echo “systemctl start httpd” | at 23:30

job 4 at Mon Apr 27 23:30:00 2015

循环调度执行cron 用户级

[root@tianyun ~]# systemctl status crond.service

[root@tianyun ~]# ps aux |grep crond

root 550 0.0 0.0 126300 1648 ? Ss 10:05 0:00 /usr/sbin/crond -n

crond进程每分钟会处理一次计划任务

=用户级=

存储位置:

[root@ever ~]# ls /var/spool/cron/

管理方式:

crontab -l List the jobs for the current user.

crontab -r Remove all jobs for the current users.

crontab -e Edit jobs for the current user.

管理员可以使用 -u username, 去管理其他用户的计划任务

/etc/cron.deny:

alice

jack

[alice@yang ~]$ crontab -e

You (alice) are not allowed to use this program (crontab)

See crontab(1) for more information

语法格式 Job format:

Minutes Hours Day-of-Month Month Day-of-Week Command

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

| | | | |

0 2 * * * /mysql_back.sh

0 2 14 * * /mysql_back.sh

0 2 14 2 * /mysql_back.sh

0 2 * * 5 /mysql_back.sh

0 2 * 6 5 /mysql_back.sh

0 2 2 * 5 /mysql_back.sh

0 2 2 6 5 /mysql_back.sh

*/5 * * * * /mysql_back.sh

0 2 1,4,6 * * /mysql_back.sh

0 2 5-9 * * /mysql_back.sh

循环调度执行cron 系统级

临时文件的清理 /tmp /var/tmp

系统信息的采集 sar

日志的轮转(切割)logrotate

通常不是由用户定义

定义位置一:

[root@ever ~]# vim /etc/crontab //该文件中默认没有定义任何计划任务

***** user-name command to be executed

定义位置二:/etc/cron.d/*

[root@ever ~]# ls /etc/cron.d

0hourly raid-check sysstat

[root@ever ~]# cat /etc/cron.d/0hourly //该文件中定义的计划任务每小时会执行

01 * * * * root run-parts /etc/cron.hourly //每小时01分以root用户执行/etc/cron.hourly目录下

所有脚本

crond: 仅仅会执行每小时定义的脚本 /etc/cron.hourly

每小时具体执行哪些脚本:

[root@ever ~]# ls /etc/cron.hourly/

0anacron 0yum-hourly.cron

[root@ever ~]# cat /etc/cron.hourly/0anacron

/usr/sbin/anacron -s

[root@ever ~]# vim /etc/anacrontab //该文件是anacron执行调用的文件

period in days delay in minutes job-identifier command

1 5 cron.daily nice run-parts /etc/cron.daily

7 25 cron.weekly nice run-parts /etc/cron.weekly

@monthly 45 cron.monthly nice run-parts /etc/cron.monthly

[root@yang ~]# ls /etc/cron.daily/

0yum-daily.cron logrotate man-db.cron mlocate

[root@yang ~]# ls /etc/cron.weekly/

[root@yang ~]# ls /etc/cron.monthly/

[root@ever ~]# ls /var/spool/anacron/

cron.daily cron.monthly cron.weekly

[root@ever ~]# cat /var/spool/anacron/cron.monthly

20170321

=cron log=

[root@ever ~]# tail /var/log/cron

Mar 29 20:01:01 tianyun run-parts(/etc/cron.hourly)[22456]: finished 0anacron

Mar 29 20:01:01 tianyun run-parts(/etc/cron.hourly)[22447]: starting 0yum-hourly.cron

Mar 29 20:01:01 tianyun run-parts(/etc/cron.hourly)[22462]: finished 0yum-hourly.cron

Mar 29 20:10:01 tianyun CROND[22563]: (root) CMD (/usr/lib64/sa/sa1 1 1)

Mar 29 20:20:01 tianyun CROND[22688]: (root) CMD (/usr/lib64/sa/sa1 1 1)

Mar 30 09:05:31 yang crond[1399]: (CRON) INFO (Syslog will be used instead of sendmail.)

Mar 30 09:05:31 yang crond[1399]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 15% if

used.)

Mar 30 09:05:31 yang crond[1399]: (CRON) INFO (running with inotify support)

Mar 30 09:10:01 yang CROND[1924]: (root) CMD (/usr/lib64/sa/sa1 1 1)

Mar 30 09:20:01 yang CROND[2109]: (root) CMD (/usr/lib64/sa/sa1 1 1)

创建周期性计划任务

对于创建长期可循环的计划任务,则要用到cron服务,具体使用方法如下:

创建、编辑、删除某个计划任务:crontab -e [-u 用户名]

查看计划任务:crontab -l [-u 用户名]

删除所有的计划任务:crontab -r [-u 用户名]

字段 说明
分钟 取值为从0到59之间的整数
小时 取值为从0到23之间的任意整数
日期 取值为1到31之间的任意整数
月份 取值为1到12之间的任意整数
星期 取值为0到7之间的任意整数,其中0与7均为星期日
命令 要执行的命令或程序脚本
特殊的时间符号 1-5 减号表示一个连续的范围,如果此数字出现在分钟,那么就是1~5分钟执行任务 1,6,9 逗号表示不连续的范围,此处表示第1、6、9分钟会执行任务。 * 表示每时每刻执行此任务。 / 计划执行的间隔频率。如分钟里出现*/10表示每隔10分钟执行此任务 。

date命令:

用法:date 选项

功能:查看、修改系统时间。查看时间可以指定时间的显示格式。

选项:-s 修改系统时间。如date -s ‘20190214 14:30’

格式代号:+%F 以2019-01-10(YYYY-MM-DD)格式来显示时间,
等价于 %Y-%m-%d

%Y 年份

%m month (01…12)

%d 按月计的日期(例如:01)

%H 小时(00-23)

%I 小时(00-12)

%M minute (00…59)

date +%F

date +%Y-%m-%d_%H:%M

touch date +%F.txt 创建名称为年-月-日的文件

touch $(date +%F) .txt

touch date +%Y-%m-%d_%H:%M.jpg 年月日小时:分的jpg文件

tar -czvf /opt/date +%F_%H:%M.tar.gz /etc/host*

你可能感兴趣的:(Linux)