【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
相关推荐
Yana.nice14 小时前
openssl将证书从p7b转换为crt格式
java·linux
AI逐月14 小时前
tmux 常用命令总结:从入门到稳定使用的一篇实战博客
linux·服务器·ssh·php
想逃离铁厂的老铁14 小时前
Day55 >> 并查集理论基础 + 107、寻找存在的路线
java·服务器
小白跃升坊14 小时前
基于1Panel的AI运维
linux·运维·人工智能·ai大模型·教学·ai agent
跃渊Yuey15 小时前
【Linux】线程同步与互斥
linux·笔记
杨江15 小时前
seafile docker安装说明
运维
舰长11515 小时前
linux 实现文件共享的实现方式比较
linux·服务器·网络
好好沉淀15 小时前
Docker开发笔记(详解)
运维·docker·容器
zmjjdank1ng15 小时前
Linux 输出重定向
linux·运维
路由侠内网穿透.15 小时前
本地部署智能家居集成解决方案 ESPHome 并实现外部访问( Linux 版本)
linux·运维·服务器·网络协议·智能家居