定时执行任务的linux命令
定时执行任务的linux命令详细介绍
在 Linux 中,定时执行任务的常用命令及工具主要有以下几种,适用于不同场景(周期性任务、一次性任务、systemd 环境等):
一、
crontab(周期性定时任务)
用途:用于定期(按分钟、小时、天、月、周)重复执行任务,是 Linux 最常用的定时工具。
语法:
- 编辑当前用户的 crontab 文件:
bash(首次运行会提示选择编辑器,如
nano、vim等) - 写入任务格式(5 个时间字段 + 执行命令):
bash* * * * *- - - - -
+----- 星期(0-6,0 表示周日)
+------- 月份(1-12)
+--------- 日期(1-31)
+----------- 小时(0-23)
+------------- 分钟(0-59)
示例:
- 每天凌晨 2 点执行脚本:bash
* * * /path/to/script.sh - 每周一至周五 9:30 执行命令:bash
* * -5 /usr/bin/command - 每月 1 日 0 点清理日志:bash
* * /var/log/*.log
- 每天凌晨 2 点执行脚本:bash
- 其他操作:
- 查看当前用户的 crontab:
crontab -l - 删除当前用户的 crontab:
crontab -r - 编辑其他用户的 crontab(需
root权限):bashusername - 全局 cron 配置(系统级任务,路径通常为
/etc/crontab或为/etc/crontab或/etc/cron.d/):bash/etc/crontab格式多一个用户字段:
* * * * * username command。
- 查看当前用户的 crontab:
二、
at(一次性定时任务)
用途:用于指定未来某个时间点执行一次任务(非周期性)。
语法:
- 启动
at交互模式,指定执行时间:bashat :30 tomorrowat :45 -04-15
at now + hour
- 输入要执行的命令,按
Ctrl+D保存并退出。 - 查看待执行的任务:bash
atq - 删除待执行的任务(根据任务编号):bash
atrm
注意:需确保 atd 服务已启动(CentOS/Ubuntu 通常默认启动,若未启动:sudo systemctl start atd)。
三、
systemd timer(systemd 环境下的定时任务)
用途:在使用 systemd 的系统(如 Ubuntu 16.04+、CentOS 7+)中,替代传统 cron 的更灵活方案。
步骤:
- 创建服务文件(
.service),定义要执行的任务:
bash/etc/systemd/system/my-task.service内容示例:
ini - 创建定时器文件(
.timer),定义执行时间:
bash/etc/systemd/system/my-task.timer内容示例(每天 8 点执行):
ini - 重载 systemd 配置并启用定时器:
bashsystemctl daemon-reloadsystemctl my-task.timer
四、其他工具
batch:在系统负载较低时执行任务(非精确时间,依赖atd服务):bashbatchanacron:针对非 24 小时运行的系统(如笔记本),确保周期性任务在系统唤醒后执行(基于cron,配置文件在/etc/anacrontab)。
注意事项
- 权限:普通用户可通过
crontab -e管理自己的任务,系统级任务需root权限。 - 日志:
cron日志:/var/log/cron.log(部分系统为/var/log/syslog)systemd timer日志:journalctl -u my-task.timer
- 环境变量:脚本中建议使用绝对路径,或在任务开头添加
source /etc/profile加载环境变量。
根据需求选择工具:周期性任务用 crontab,一次性任务用 at,systemd 环境推荐 systemd timer。