【linux】定时任务讲解

文章目录

  • [一. 在某时刻只执行一次:at](#一. 在某时刻只执行一次:at)
    • [1. 设置定时任务](#1. 设置定时任务)
    • [2. 查看和删除定时任务](#2. 查看和删除定时任务)
  • [二. 周期性执行任务:cron](#二. 周期性执行任务:cron)
    • [1. 启动crond进程](#1. 启动crond进程)
    • [2. 编辑定时任务](#2. 编辑定时任务)
    • [3. 查看和删除](#3. 查看和删除)
    • [4. 用户权限](#4. 用户权限)
  • [三. /etc/crontab的管理](#三. /etc/crontab的管理)

一. 在某时刻只执行一次:at

1. 设置定时任务

比如从现在开始,设置30分钟后自动关机,这时就可以使用at命令

shell 复制代码
[root@localhost ~]# at now + 30 minutes
at> /sbin/shutdown-h now
at> <EOT>
job 1 at 2012-11-06 23:39

第一行是定义从现在开始算,30分钟后安排一个任务;

第二行是到了时间后执行关机操作;

第三行是 < EOT>,这不是使用键盘输入的,而是使用了组合键Ctrl+D,表示输入结束;

第四行是系统提示有一个任务将在23:39被执行。

使用at还可以安排在具体的时间执行任务,比如说在午夜12点实现自动关机,如下所示:

c 复制代码
[root@localhost ~]# at 00:00 2012-11-07
at> /sbin/shutdown-h now
at> <EOT>
job 2 at 2012-11-07 00:00
[root@localhost ~]# atq
2       2012-11-07 00:00 a root

2. 查看和删除定时任务

可以使用atq命令查看当前使用at命令调度的任务列表,其中第一列是任务编号。

也可以使用atrm删除已经进入任务队列的任务,再使用atq查询时,发现已经没有任务列表了,如下所示:

c 复制代码
[root@localhost ~]# atq
1       2012-11-06 23:39 a root #查询at的任务队列,第一个数字代表该任务的标号

[root@localhost ~]# atrm 1 #删除标号为1的任务

二. 周期性执行任务:cron

有一些任务是需要周期性执行的,比如说每天早晨的闹钟会在设定的时间准时响起。在Linux中,可以利用cron工具做这种设置。

1. 启动crond进程

首先需要确定crond进程在运行,如果没有运行,需要先启动该进程。

c 复制代码
[root@localhost ~]# service crond start
Starting crond: [  OK  ]
[root@localhost ~]# service crond status
crond (pid  3257) is running...

2. 编辑定时任务

用户可通过crontab来设置自己的计划任务,并使用-e参数来编辑任务。进入编辑模式后,需要编辑执行的时间和执行的命令。

c 复制代码
*  *  *  *  * command

前面5个*可以用来定义时间,

第一个 * 表示分钟,可以使用的值是1~59,每分钟可以使用 /1表示;

第二个 * 表示小时,可以使用的值是0~23;

第三个 * 表示日期,可以使用的值是1~31;

第四个 * 表示月份,可以使用的值是1~12;

第五个 * 表示星期几,可以使用的值是0~6,0代表星期日;

一些例子

c 复制代码
*  *  *  *  * service httpd restart
*/1  *  *  *  * service httpd restart
#这两种写法其实是一致的,都是每分钟重启httpd进程。请注意,这只是一个例子,
除非你有确定的目的,否则不要在实际生产环境中这么设置
*  */1  *  *  * service httpd restart
#每小时重启httpd 进程

*  23-3/1  *  *  * service httpd restart
#从23点开始到3点,每小时重启httpd 进程

30 23 *  *  * service httpd restart
#每天晚上23点30分重启httpd进程

30 23 1  *  * service httpd restart
#每月的第一天晚上23点30分重启httpd进程

30 23 1  1  * service httpd restart
#每年1月1日的晚上23点30分重启httpd进程

30 23 *  *  0 service httpd restart
#每周日晚上23点30分重启httpd进程

3. 查看和删除

设置完成后,可以使用crontab -l查看设置的任务,也可以使用crontab -r删除所有的任务,如下所示:

c 复制代码
[root@localhost ~]# crontab -l
30 23 *  *  0 service httpd restart
[root@localhost ~]# crontab -r
[root@localhost ~]# crontab -l
no crontab for root

4. 用户权限

4.1. 黑名单

如果由于特殊的原因需要禁止某些用户使用这个功能,可以将该用户的用户名添加至/etc/cron.deny中。

4.2指定用户

普通用户只可以设置、查看、删除自己的计划任务,root可以使用-u参数查看指定用户的任务。

比如root可以查看用户john的任务列表:

c 复制代码
[root@localhost ~]# crontab -u john -l

三. /etc/crontab的管理

系统也有自己的例行任务,而其配置文件是/etc/crontab。看一下这个文件的内容:

c 复制代码
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
相关推荐
萨格拉斯救世主20 分钟前
戴尔R930服务器增加 Intel X710-DA2双万兆光口含模块
运维·服务器
无所谓จุ๊บ22 分钟前
树莓派开发相关知识十 -小试服务器
服务器·网络·树莓派
Jtti23 分钟前
Windows系统服务器怎么设置远程连接?详细步骤
运维·服务器·windows
TeYiToKu26 分钟前
笔记整理—linux驱动开发部分(9)framebuffer驱动框架
linux·c语言·arm开发·驱动开发·笔记·嵌入式硬件·arm
dsywws29 分钟前
Linux学习笔记之时间日期和查找和解压缩指令
linux·笔记·学习
yeyuningzi37 分钟前
Debian 12环境里部署nginx步骤记录
linux·运维·服务器
上辈子杀猪这辈子学IT1 小时前
【Zookeeper集群搭建】安装zookeeper、zookeeper集群配置、zookeeper启动与关闭、zookeeper的shell命令操作
linux·hadoop·zookeeper·centos·debian
minihuabei1 小时前
linux centos 安装redis
linux·redis·centos
EasyCVR1 小时前
萤石设备视频接入平台EasyCVR多品牌摄像机视频平台海康ehome平台(ISUP)接入EasyCVR不在线如何排查?
运维·服务器·网络·人工智能·ffmpeg·音视频
lldhsds2 小时前
书生大模型实战营第四期-入门岛-1. Linux前置基础
linux