首页 > 系统教程 > LINUX > 正文

Linux如何配置定时任务?_Linuxcron与at命令使用技巧

絕刀狂花
发布: 2025-08-08 10:25:01
原创
757人浏览过

cron用于周期性任务,at用于一次性任务。配置cron任务使用crontab -e编辑,格式为分钟 小时 日期 月份 星期 命令,支持特殊字符如*、,、-、/;查看任务用crontab -l,删除用crontab -r。配置at任务通过at命令后接时间输入命令,时间格式灵活,如hh:mm、now + n units;查看用atq,删除用atrm。cron任务失败常见原因包括环境变量不一致、输出未重定向、权限不足,解决办法为设置path、重定向输出至日志文件、确保执行权限。at适用于延时操作、特定事件后执行清理或报告、非高峰时段维护等场景。用户crontab适用于个人脚本和非特权任务,系统级任务配置在/etc/crontab、/etc/cron.d/或周期目录如/etc/cron.daily/,适用于全局维护或应用相关任务。选择顺序为:个人任务优先用户crontab,系统维护用周期目录,应用任务放/etc/cron.d/,全局root任务慎用/etc/crontab。

Linux如何配置定时任务?_Linuxcron与at命令使用技巧

Linux系统下配置定时任务,核心在于利用

cron
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
at
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
这两个命令。简单来说,
cron
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
用于处理那些需要周期性、重复执行的任务,比如每天凌晨备份数据;而
at
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
则专注于一次性、在特定时间点执行的任务,比如在某个会议结束后自动发送一份报告。理解它们各自的适用场景和操作方式,是实现系统自动化管理的关键一步。

Linux如何配置定时任务?_Linuxcron与at命令使用技巧

解决方案

配置定时任务,我们主要围绕

cron
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
at
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
展开。

对于周期性任务,我们使用

cron
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
。每个用户都可以拥有自己的
crontab
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
文件,通过
crontab -e
登录后复制
登录后复制
登录后复制
登录后复制
命令进行编辑。打开后,你会看到一个文本界面,每一行代表一个定时任务。它的基本格式是:

Linux如何配置定时任务?_Linuxcron与at命令使用技巧

分钟 小时 日期 月份 星期 命令
登录后复制

  • 分钟
    登录后复制
    (0-59)
  • 小时
    登录后复制
    (0-23)
  • 日期
    登录后复制
    (1-31)
  • 月份
    登录后复制
    (1-12)
  • 星期
    登录后复制
    (0-7,0和7都代表星期天)
  • 命令
    登录后复制
    (要执行的脚本或命令)

例如,我想让一个名为

my_script.sh
登录后复制
的脚本在每天凌晨2点30分执行,我可以这样写:
30 2 * * * /path/to/my_script.sh
登录后复制

Linux如何配置定时任务?_Linuxcron与at命令使用技巧

如果我想让它在每周一的上午9点执行,可以这样:

0 9 * * 1 /path/to/my_script.sh
登录后复制

星号

*
登录后复制
表示“任何”或“所有”的意思。此外,
cron
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
还支持一些特殊字符,如逗号
,
登录后复制
表示列表(1,3,5),连字符
-
登录后复制
表示范围(1-5),斜线
/
登录后复制
表示步长(*/5表示每5分钟)。

编辑完成后保存退出,

cron
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
守护进程会自动加载新的配置。你可以用
crontab -l
登录后复制
查看当前用户的定时任务列表,用
crontab -r
登录后复制
删除所有定时任务。

对于一次性任务,我们使用

at
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
。这个命令允许你指定一个未来的时间点来执行命令。使用方法是先输入
at
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
命令,后面跟上时间,然后回车,接着输入你想要执行的命令,最后按
Ctrl+D
登录后复制
登录后复制
登录后复制
登录后复制
结束输入。

时间格式非常灵活,可以接受

HH:MM
登录后复制
(小时:分钟),
midnight
登录后复制
(午夜),
noon
登录后复制
(中午),
teatime
登录后复制
(下午4点),
tomorrow
登录后复制
(明天),
now + N units
登录后复制
(现在加N分钟/小时/天/周)。

例如,我想让系统在今天下午5点重启:

at 17:00
sudo reboot
<EOT> # 这里按Ctrl+D
登录后复制

如果我想让一个备份脚本在明天上午10点执行:

at 10:00 tomorrow
/path/to/backup_script.sh
<EOT> # 这里按Ctrl+D
登录后复制

你可以使用

atq
登录后复制
(或
at -l
登录后复制
)查看当前待执行的任务列表,使用
atrm <任务号>
登录后复制
(或
at -d <任务号>
登录后复制
)来删除特定的
at
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
任务。

cron任务执行失败,我该如何排查?

这几乎是每个Linux用户都会遇到的问题,

cron
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
任务在手动执行时一切正常,放到
crontab
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
里却悄无声息地失败了。别担心,这通常不是什么大问题,而是几个常见的“坑”。

首先,环境变量是罪魁祸首之一。当你手动执行命令时,你当前Shell的环境变量(比如

PATH
登录后复制
登录后复制
登录后复制
)是完整的,系统知道去哪里找
ls
登录后复制
grep
登录后复制
这些命令。但在
cron
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
环境里,
PATH
登录后复制
登录后复制
登录后复制
通常非常精简,可能只有
/usr/bin:/bin
登录后复制
。如果你的脚本依赖了
/usr/local/bin
登录后复制
或某个自定义路径下的命令,
cron
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
就找不到了。 解决办法:在你的
crontab
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
文件的顶部显式设置
PATH
登录后复制
登录后复制
登录后复制
,或者在脚本中写明所有命令的绝对路径。例如:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
登录后复制
0 2 * * * /usr/bin/python3 /home/user/my_script.py
登录后复制

其次,输出重定向

cron
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
任务执行时,任何标准输出(stdout)和标准错误(stderr)都会尝试通过邮件发送给
crontab
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
的所有者。如果输出量大,或者邮件服务配置有问题,这本身就可能导致问题。更重要的是,你无法直接看到输出,也就无法知道哪里出了错。 解决办法:将命令的输出重定向到一个日志文件。这样,即使任务失败,你也能从日志中找到线索。
30 2 * * * /path/to/my_script.sh >> /var/log/my_script.log 2>&1
登录后复制
这会将所有输出(包括错误)追加到指定日志文件。

再者,权限问题。确保你的脚本有执行权限(

chmod +x script.sh
登录后复制
),并且脚本中涉及的文件或目录,
cron
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
任务执行的用户(通常是
crontab
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
所有者)有足够的读写权限。

最后,验证命令本身。在把命令放入

crontab
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
之前,尝试用
su - <username> -c "command"
登录后复制
的方式在目标用户环境下执行一次,看看是否能成功。这能模拟
cron
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
的执行环境。 另外,查看系统日志也是个好习惯,
cron
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
的执行情况通常会记录在
/var/log/syslog
登录后复制
/var/log/cron
登录后复制
中,可以提供有价值的错误信息。

at命令在哪些场景下能发挥最大价值?

at
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
命令的价值,在于它对“一次性”任务的完美支持。它就像一个时间胶囊,你把指令放进去,设定一个未来的开启时间,然后就可以完全忘记它了。

最常见的应用场景,就是延时执行某些操作。比如,你正在进行一项耗时但不需要你实时监控的操作,如一个大型文件的下载或编译。你希望它完成后,系统能自动关机或发送通知,但你不想等到它完成再手动操作。这时,你就可以在开始前设定一个

at
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
任务:
at now + 2 hours
登录后复制
sudo shutdown -h now
登录后复制
Ctrl+D
登录后复制
登录后复制
登录后复制
登录后复制
这样,两个小时后,无论你是否还在电脑前,系统都会尝试关机。

另一个很实用的场景是在某个特定事件后执行清理或报告。想象一下,你启动了一个需要长时间运行的测试,你知道它大概会在某个时间点结束。你可以在启动测试的同时,设定一个

at
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
任务来收集测试结果、生成报告,甚至清理临时文件。
at 23:00
登录后复制
collect_test_results.sh
登录后复制
clean_temp_files.sh
登录后复制
send_report_email.sh
登录后复制
Ctrl+D
登录后复制
登录后复制
登录后复制
登录后复制

此外,

at
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
也常用于系统维护和更新。有时候,你可能需要在非高峰时段执行一些中断性操作,比如重启服务或更新软件包。如果你不想半夜爬起来操作,
at
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
就能派上用场。
at 03:00 tomorrow
登录后复制
sudo apt update && sudo apt upgrade -y
登录后复制
sudo systemctl restart my_service
登录后复制
Ctrl+D
登录后复制
登录后复制
登录后复制
登录后复制

它尤其适合那些不具备周期性,或者周期性不规律的任务。比如,你只想在下周二的某个时间点做一次数据同步,而不是每周二都做,那

at
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
就比
cron
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
更合适。它避免了你为了一次性任务去修改
crontab
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
,又担心之后忘记删除的麻烦。

用户crontab与系统级定时任务,我该如何选择?

在Linux中,定时任务不仅仅是用户自己的

crontab
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
,系统层面也有一套完善的机制。理解这两者的区别,对于合理规划和管理定时任务至关重要。

用户

crontab
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
(
crontab -e
登录后复制
登录后复制
登录后复制
登录后复制
)
: 这是最常见、最直接的定时任务配置方式。每个用户都可以通过
crontab -e
登录后复制
登录后复制
登录后复制
登录后复制
编辑自己的定时任务列表。这些任务将以该用户的身份和权限执行。 适用场景

  • 个人脚本和自动化:如果你有一些个人使用的脚本,比如定时清理个人下载文件夹、定时同步个人笔记、定时提醒等,放在自己的
    crontab
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    里最合适。
  • 非特权任务:不需要root权限就能完成的任务。
  • 隔离性:不同用户的
    crontab
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    是相互独立的,一个用户的任务不会影响到其他用户。

系统级定时任务: 系统级定时任务通常由root用户或系统管理员配置,用于执行系统维护、服务管理、日志轮换等全局性任务。它们主要存在于以下几个地方:

  1. /etc/crontab
    登录后复制
    登录后复制
    登录后复制
    :这是系统级的
    crontab
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    文件,与用户
    crontab
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    格式类似,但多了一列“用户名”,用来指定该任务以哪个用户的身份执行。
    分钟 小时 日期 月份 星期 用户名 命令
    登录后复制
    适用场景:需要root权限执行的系统维护任务,或者由系统管理员统一管理的全局性任务。

  2. /etc/cron.d/
    登录后复制
    登录后复制
    登录后复制
    目录:这个目录下存放着独立的
    crontab
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    文件,通常由软件包安装时创建,用于管理该软件包相关的定时任务。每个文件都是一个独立的
    crontab
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    ,同样需要指定执行用户。 适用场景:第三方应用或服务需要定时执行的后台任务,例如Web服务器日志分析、数据库备份等。这样做的好处是,卸载软件包时,可以直接删除对应的文件,避免残留。

  3. /etc/cron.{hourly,daily,weekly,monthly}/
    登录后复制
    目录:这些目录是
    cron
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    的另一种执行方式。放在
    hourly
    登录后复制
    目录下的脚本每小时执行一次,
    daily
    登录后复制
    目录下的每天执行一次,以此类推。这些脚本通常不需要
    crontab
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    格式,直接是可执行的脚本文件。
    run-parts
    登录后复制
    命令会负责执行这些目录下的所有脚本。 适用场景:常规的系统维护任务,如日志切割(logrotate)、文件系统检查、软件包更新检查等。这些任务通常由系统自动管理,无需精确到分钟的调度。

如何选择?

我的建议是:

  • 从用户
    crontab
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    开始
    :如果你的任务是个人性质的,不需要root权限,并且只影响你自己的用户环境,那么毫无疑问选择
    crontab -e
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    。这是最简单、最安全的起点。
  • 考虑
    cron.{hourly,daily,weekly,monthly}/
    登录后复制
    :如果你的任务是系统级别的,但不需要精确到分钟的调度,且是周期性的常规维护,那么将脚本放到这些目录中是最佳实践。这通常是系统推荐的方式。
  • 使用
    /etc/cron.d/
    登录后复制
    登录后复制
    登录后复制
    :如果你是开发人员,需要为你的应用程序添加定时任务,并且希望这个任务与应用程序一起部署和管理,那么在
    /etc/cron.d/
    登录后复制
    登录后复制
    登录后复制
    下创建一个独立的
    crontab
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    文件是个优雅的选择。这使得任务的生命周期与应用保持一致。
  • 谨慎使用
    /etc/crontab
    登录后复制
    登录后复制
    登录后复制
    :除非你确实需要一个全局性的、由root用户执行的定制任务,并且没有更合适的目录(比如它不属于任何特定的软件包,也不是常规的每日/周任务),否则尽量避免直接修改
    /etc/crontab
    登录后复制
    登录后复制
    登录后复制
    。保持这个文件的整洁,更有利于系统管理。

简单来说,用户任务归用户,系统任务归系统,应用任务归应用。这样,不仅能保持系统的清晰和可维护性,也能避免权限冲突和不必要的复杂性。

以上就是Linux如何配置定时任务?_Linuxcron与at命令使用技巧的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号