Linux常见定时任务命令 系统级别的定时任务
目录
Linux常见定时任务命令
crontab命令
命令简介
命令选项
使用方法
注意事项
at命令
命令简介
命令选项
时间设置方式
使用方法
Linux查看与删除系统级别计划任务
计划任务的类型及对应查看和删除方法
一次性任务
周期性任务
注意事项
Linux常见定时任务命令
在Linux系统中,定时任务是系统管理的重要组成部分,它允许管理员或用户安排任务在特定时间自动执行。常见的定时任务命令有 crontab
和 at
,以下为你详细介绍:
crontab命令
命令简介
crontab
是一个常用的定时任务管理工具,常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于crontab文件中,以供之后读取和执行。通常,crond
守护进程会在后台运行,每分钟检查是否有预定的作业需要执行 。
命令选项
-u
:指定一个用户。-l
:列出某个用户的任务计划。-r
:删除某个用户的任务。-e
:编辑某个用户的任务 。
使用方法
- 编辑crontab文件:使用
crontab -e
命令来编辑当前用户的crontab文件,在编辑器中,可以添加、删除或修改定时任务 。 - 添加定时任务:在crontab文件中,每行代表一个定时任务,格式为
分 时 日 月 周 要执行的命令
。例如,要在每天凌晨2点执行/root/backup.sh
脚本,可以添加如下内容:0 2 * * * /root/backup.sh
。 - 查看任务列表:使用
crontab -l
命令可以列出当前用户的所有定时任务 。 - 删除任务:使用
crontab -r
命令可以删除当前用户的所有定时任务。
注意事项
- 如果使用
crontab
来定时执行脚本,无法执行,但直接通过命令(如./test.sh
)又可以正常执行,这主要是因为无法读取环境变量的原因。解决方法有:所有命令需要写成绝对路径形式;在shell脚本开头添加相关代码;在/etc/crontab
中添加环境变量,在可执行命令之前添加命令./etc/profile;/bin/sh
,使得环境变量生效 。 - 每条任务调度执行完毕,系统都会将任务输出信息通过电子邮件的形式发送给当前系统用户,日积月累,日志信息会非常大,可能会影响系统的正常运行,因此,将每条任务进行重定向处理非常重要。例如,可以在crontab文件中设置如下形式,忽略日志输出:
/dev/null 2>&1
。
at命令
命令简介
at
命令用于设置在某个特定的时间点执行一次性的任务 。
命令选项
-m
:当指定的任务被完成之后,将给用户发送邮件,即使没有标准输出。-f
:从指定文件读入任务而不是从标准输入读入。-t
:以时间参数的形式提交要运行的任务 。
时间设置方式
- 绝对时间:
-
hh:mm
:小时:分钟(当天,如果时间已过,则在第二天执行)。midnight
:深夜。noon
:中午。teatime
:下午茶时间(下午4点)。today
:今天。tomorrow
:明天。- 指定具体执行日期:
mm/dd/yy
(月/日/年)或dd.mm.yy
(日.月.年)。
- 相对计时法:
now + n units
,now
是现在时刻,n
为数字,units
是单位(minutes
、hours
、days
、weeks
) 。
使用方法
例如,要在明天17点钟,输出时间到指定文件内,可以使用以下命令:
at 17:00 tomorrow
at> date > /tmp/time.log
at> <EOT> # 按下 Ctrl + D 发起执行
在任务设定后,在没有执行之前可以用 atq
命令来查看系统没有执行的工作任务 。
Linux查看与删除系统级别计划任务
计划任务的类型及对应查看和删除方法
在Linux系统中,计划任务主要分为一次性任务和周期性任务,二者的查看和删除方式有所不同:
一次性任务
一次性任务使用at
命令进行管理。
- 查看一次性任务:可以使用
at -l
或atq
命令来查看系统中所有的一次性计划任务,执行后会显示任务编号和执行时间等信息。例如:
[root@ken~]# at -l
1 Fri Mar 1 10:00:00 2019 a root
- 删除一次性任务:使用
atrm
或at -d
加上要删除的任务编号来删除指定的一次性计划任务。比如要删除编号为1的任务,可执行以下命令:
[root@ken~]# atrm 1
# 或者
[root@ken~]# at -d 1
周期性任务
周期性任务使用crontab
命令管理,系统级别的周期性任务配置通常在/etc/crontab
文件中,同时也有与cron
相关的目录(如/etc/cron.hourly
、/etc/cron.daily
、/etc/cron.weekly
、/etc/cron.monthly
)用于存放不同周期执行的脚本。
- 查看周期性任务:
-
- 查看当前用户的周期性任务:使用
crontab -l
命令。 - 查看系统级别的周期性任务:直接查看
/etc/crontab
文件的内容,可使用cat /etc/crontab
命令。示例内容如下:
- 查看当前用户的周期性任务:使用
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# 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
# | | | | |
# * * * * * user-name command
01 * * * * root run-parts /etc/cron.hourly
- 删除周期性任务:
-
- 通过编辑
crontab
文件删除:
- 通过编辑
-
-
- 备份当前的
crontab
文件,避免误操作导致数据丢失:crontab -l > /tmp/crontab.txt
。 - 使用
crontab -e
命令编辑当前用户的crontab
文件,删除对应的任务行;若要编辑系统级别的任务,则编辑/etc/crontab
文件(不建议直接修改,可能影响系统稳定性)。 - 重新加载修改后的
crontab
文件,使用crontab /tmp/crontab.txt
(如果是修改的当前用户的crontab
)。
- 备份当前的
-
-
- 使用
sed
命令删除:若想删除包含特定关键字的任务,可以使用sed
命令。例如删除包含myscript.sh
的任务:
- 使用
sed -i '/myscript.sh/d' /tmp/crontab.txt
crontab /tmp/crontab.txt
- **删除整个`crontab`任务列表**:使用`crontab -r`命令可以删除当前用户的所有周期性计划任务。
注意事项
- 在删除系统级别计划任务时要格外谨慎,因为这些任务通常对系统的正常运行至关重要,误删可能导致系统出现故障。
- 每次修改计划任务后,建议查看任务是否按预期被删除或修改,可再次使用相应的查看命令进行确认。