Linux- cron调度进程

cron 是一个 Unix 类操作系统中的时间调度守护进程,用于在特定的时间或间隔运行指定的命令或脚本。它非常适合自动化系统管理和维护任务,如备份、日志轮转、系统监控等。以下是 cron 守护进程的详细介绍。

cron 守护进程的工作原理

  1. crontab 文件

    • cron 从称为 crontab(cron table)的文件中读取任务计划。每个用户都有自己的 crontab 文件,系统级任务在 /etc/crontab/etc/cron.d/ 目录中定义。
    • crontab 文件中每行定义一个计划任务,包括时间表达式和要执行的命令。
  2. 定期检查

    • cron 守护进程每分钟检查一次 crontab 文件和目录 /var/spool/cron/crontabs//etc/cron.d//etc/crontab,以确定是否有任务需要执行。
  3. 执行任务

    • 当当前时间与 crontab 文件中的时间表达式匹配时,cron 执行相应的命令或脚本。

crontab 文件格式

crontab 文件中的每一行代表一个任务,格式如下:

* * * * * command_to_be_executed
- - - - -
| | | | |
| | | | +----- 一周中的星期几 (0 - 7) (星期天为 0 或 7)
| | | +------- 月份 (1 - 12)
| | +--------- 日期 (1 - 31)
| +----------- 小时 (0 - 23)
+------------- 分钟 (0 - 59)

例如,每天凌晨 2 点运行备份脚本:

0 2 * * * /path/to/backup.sh

常用的 crontab 命令

查看 crontab 文件
crontab -l
编辑 crontab 文件
crontab -e
删除 crontab 文件
crontab -r
从文件安装 crontab
crontab filename

系统级 crontab 文件

除了用户级 crontab 文件外,还有一些系统级 crontab 文件:

  • /etc/crontab:系统级的 crontab 文件,格式与用户级略有不同。它包含了一个用户字段,指定哪个用户运行任务。

    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    
    # m h dom mon dow user command
    0 2 * * * root /path/to/backup.sh
    
  • /etc/cron.d/ 目录:可以包含多个任务文件,文件中的每行格式与 /etc/crontab 相同。

cron 特殊字符串

cron 还支持一些特殊的字符串,用于简化时间表达式:

  • @reboot:在系统重启后运行。
  • @yearly@annually:每年运行一次,相当于 0 0 1 1 *
  • @monthly:每月运行一次,相当于 0 0 1 * *
  • @weekly:每周运行一次,相当于 0 0 * * 0
  • @daily@midnight:每天运行一次,相当于 0 0 * * *
  • @hourly:每小时运行一次,相当于 0 * * * *

例如,每次系统重启后运行脚本:

@reboot /path/to/startup.sh

安全性和最佳实践

  1. 限制访问

    • 仅允许受信任的用户编辑和安装 crontab 文件。
    • 使用 /etc/cron.allow/etc/cron.deny 文件控制哪些用户可以使用 crontab 命令。
  2. 日志记录

    • 配置 cron 日志记录,以监控任务执行情况和故障。
    • /etc/rsyslog.conf/etc/rsyslog.d/ 配置文件中确保 cron 日志记录是启用的,例如:
      cron.* /var/log/cron.log
      
  3. 使用绝对路径

    • crontab 中指定命令和脚本的绝对路径,确保任务在预期的位置运行。
  4. 环境变量

    • crontab 文件中设置必要的环境变量,如 PATH,确保任务能够找到需要的命令和脚本。
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    

例子

用户级 crontab 示例
# 每天凌晨 1 点运行备份脚本
0 1 * * * /usr/local/bin/backup.sh

# 每小时检查一次磁盘使用情况
0 * * * * /usr/local/bin/check_disk.sh

# 每月 1 号凌晨 2 点清理日志文件
0 2 1 * * /usr/local/bin/clean_logs.sh
系统级 crontab 示例
# /etc/crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# m h dom mon dow user command
0 3 * * * root /usr/local/bin/system_backup.sh
15 4 * * 7 root /usr/local/bin/weekly_report.sh

通过了解和正确配置 cron 守护进程,可以实现系统管理和维护任务的自动化,极大提高工作效率和系统可靠性。

相关推荐

  1. Linux- cron调度进程

    2024-05-16 14:08:16       34 阅读
  2. linux | crond cron | service systemctl chkconfig

    2024-05-16 14:08:16       44 阅读
  3. Linux crond 引发的僵尸进程

    2024-05-16 14:08:16       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-16 14:08:16       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-16 14:08:16       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-16 14:08:16       82 阅读
  4. Python语言-面向对象

    2024-05-16 14:08:16       91 阅读

热门阅读

  1. 深度解析Kubernetes网络模型

    2024-05-16 14:08:16       30 阅读
  2. FunASR语音识别快速上手指南

    2024-05-16 14:08:16       24 阅读
  3. SDL系列(二)—— 渲染窗口与BMP图片

    2024-05-16 14:08:16       37 阅读
  4. Gone框架介绍19 -如何进行单元测试?

    2024-05-16 14:08:16       30 阅读
  5. LLM 训练策略

    2024-05-16 14:08:16       27 阅读
  6. 免费 API 推荐! 零成本提升项目能力 - CSDN 博客

    2024-05-16 14:08:16       41 阅读