当前位置:首页 > 技术文章 > 正文内容

008 Linux Shell 入门教程(八):任务调度与自动化

douba317小时前技术文章4


Linux 提供了一套简单却强大的任务调度机制,最核心的工具就是:
cron 和 crontab。通过这套机制,我们可以实现:

  • 每天凌晨备份数据库
  • 每小时清理临时文件
  • 每分钟监控服务状态
  • 每周自动更新日志归档

一、什么是 cron 与 crontab?

工具

作用

cron

Linux 的任务调度守护进程,后台持续运行

crontab

用户级别的任务调度表,配置计划任务的命令


二、cron 时间格式详解

crontab 使用一种特定格式来定义任务执行的时间,共 5 个时间字段:

分 时 日 月 星期 命令

字段

范围

示例

分钟(minute)

0–59

30 表示半点

小时(hour)

0–23

4 表示凌晨 4 点

日期(day)

1–31

15 表示每月15号

月份(month)

1–12

8 表示 8 月

星期(week)

0–7

0 或 7 都表示星期日

星号 * 表示“每”。例如 * * * * * 表示“每分钟都执行”。


示例时间表达式

表达式

含义

0 3 * * *

每天凌晨 3 点执行

*/5 * * * *

每 5 分钟执行一次

0 0 * * 0

每周日 0 点执行

30 9 1 * *

每月 1 号上午 9:30 执行


三、使用 crontab 添加计划任务

1. 编辑当前用户的计划任务:

crontab -e

首次使用会让你选择编辑器(如 vim、nano)。

2. 添加一个任务示例:

0 2 * * * /home/user/backup.sh

含义:每天凌晨 2 点执行 backup.sh 脚本。

3. 查看当前任务:

crontab -l

4. 删除当前任务表:

crontab -r

四、日志记录与调试

系统日志位置:

不同系统略有差异,常见日志文件包括:

  • /var/log/cron
  • /var/log/syslog
  • /var/log/messages

查看日志:

grep CRON /var/log/syslog

五、crontab 中常见坑及调试建议

1. 路径问题

cron 执行的命令没有默认 shell 环境变量,所以推荐使用绝对路径。

/usr/bin/python3 /home/user/script.py

或者在脚本中手动设置 PATH:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

2. 权限问题

确保脚本有执行权限:

chmod +x your_script.sh

3. 输出未查看

可以将输出重定向到日志文件中:

0 1 * * * /path/to/script.sh >> /var/log/myscript.log 2>&1

六、使用特殊字符串定义任务

crontab 支持一些特殊关键字:

关键字

等价表达式

含义

@reboot

-

系统启动时执行一次

@daily

0 0 * * *

每天

@hourly

0 * * * *

每小时

@weekly

0 0 * * 0

每周日

@monthly

0 0 1 * *

每月 1 日

@yearly

0 0 1 1 *

每年元旦


七、综合实战:自动备份日志脚本

脚本示例:backup_log.sh

#!/bin/bash
log_dir="/var/log/nginx"
backup_dir="/backup/logs"
mkdir -p $backup_dir
cp $log_dir/*.log $backup_dir/$(date +%F_%H-%M-%S)_logs.tar.gz

设置定时任务:

0 3 * * * /home/user/backup_log.sh >> /home/user/backup.log 2>&1

效果:每天凌晨 3 点自动备份 nginx 日志并输出到日志文件。


八、系统级任务调度

除了 crontab -e 为用户设置的计划任务,系统还有:

  • /etc/crontab:系统级调度任务文件
  • /etc/cron.* 目录:

目录

含义

/etc/cron.hourly/

每小时运行

/etc/cron.daily/

每天运行

/etc/cron.weekly/

每周运行

/etc/cron.monthly/

每月运行

将脚本放进这些目录即可按周期运行。


九、小结

技能点

内容

任务调度工具

cron, crontab

时间格式

分 时 日 月 周

脚本调度

使用绝对路径 + 权限

日志调试

查看 /var/log/syslog 等

系统任务

/etc/cron.* 目录


下一篇预告:

Linux Shell 入门教程(九):Shell 脚本项目实战:自动备份 + 邮件通知

下一篇,我们将通过一个完整的项目,把学过的内容整合:实现定时自动备份、压缩、上传并发送通知邮件的功能,正式进入实战阶段!

相关文章

Linux 远程数据同步工具详解(linux 远程数据库)

一、简介1 认识Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。Rsync使用所谓的“Rsync算法”来使本地和远 程两个主机之...

Linux 防火墙怎么开?3 分钟学会放行 80 端口,再也不怕远程连接被拒

刚部署完网站却打不开?远程连接突然被拒?90% 的原因是防火墙把端口 “封锁” 了!别慌!今天教你用最简单的命令,3 分钟搞定 Linux 防火墙端口放行,新手也能秒变 “防火墙管理高手”!一、为什么...

linux 查看当前应用内存状况,以及内存参数含义

1、查看进程号ps -ef | grep tomcat2、查看当前内存分配,200ms打印一次jstat -gc 进程号 200 1jstat -gc 34480 200 1 S0C S1C...

如何检查 Linux 系统是 32 位还是 64 位?这9个命令查的又快又准!

在 Linux 系统中,位数(bit)通常指的是 CPU 架构的位宽,即 CPU 一次能够处理的数据量。32 位系统和 64 位系统在内存寻址能力、计算性能和软件支持上存在显著差异:「32 位系统」:...

linux安装FTP(linux安装ftp服务器的步骤)

1、 在nkftp目录下安装ftp,进入到nkftp里面[root@localhost bin]#cd /data/nkftp执行安装命令:[root@localhost nkftp]# rpm -i...

大神教你用FTP方式无人值守批量安装 linux系统

无人值守安装,顾名思义,安装系统的过程中不需要人的干扰,其可以实现自动安装,所以无人值守安装的优点是:减少安装过程中的人机交互,提高安装效率。一、工作原理:dhcpd + ftp + tftpdPXE...