51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

Linux 计划任务

Linux 中有时会遇到需要定时自动执行任务的情况,本文记录Linux 计划任务相关命令。

计划任务 {#计划任务}

  • 计划任务指的是需要定时自动执行或周期执行的工作任务
  • linux系统中,可以通过cron和at两种命令实现计划任务

at 单次计划任务 {#at-单次计划任务}

指的是定时执行一次的计划任务,可以使用 at 命令完成

安装 {#安装}

开机启动 {#开机启动}

命令格式 {#命令格式}

  • 创建任务

    • 时间格式

    | 格式 | 示例 | 含义 | |------------------------------------------------------|-------------------------------|--------------------------------| | HH:MM | 02:00 | 在今日的 HH:MM 进行,若该时刻已过,则明天此时执行任务 | | HH:MM YYYY-MM-DD | 04:00 2016-09-20 | 在某年某月的某一天的特殊时刻进行该项任务 | | HH:MM[am/pm] [Month] [Date] | 04pm March 17 17:20 tomorrow | 在某月的某一天的特殊时刻进行该项任务 | | HH:MM[am/pm] + number [minutes/hours/days/weeks] | now + 5 minutes 04pm + 3 days | 在某个时间点再加几个时间后才进行该项任务 |

  • 查看计划任务

  • 查看任务内容

  • 删除计划任务

  • 保存任务(按键)

  • 执行方式为交互式

  • at 队列存放在/var/spool/at目录中

  • 通过/etc/at.{allow,deny}控制用户是否能执行at任务(白名单优先)

    先寻找/etc/at.allow 文件,文件中的使用者才能使用 at ,没有在这个文件中的使用者则不能使用 at (即使没有写在at.deny 当中)

    如果/etc/at.allow 不存在,就寻找 /etc/at.deny 这个文件,若写在这个 at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 文件中的使用者则可使用 at 命令。如果两个文件都不存在,只有 root 可以使用 at 这个命令。(相当于一个空的/etc/at.allow文件)

cron 周期性任务计划 {#cron-周期性任务计划}

命令用法 {#命令用法}

| 命令选项 | 含义 | |------|----------------| | -e | 编辑计划任务 edit | | -l | 查看计划任务 display | | -u | 指定用户 user | | -r | 删除计划任务 remove |

  • 日志: /var/log/cron

  • 系统cron任务: /etc/crontab

  • 计划任务都会被保存在 /var/spool/cron/,文件命名就是用户名,需要 root 才能进入

  • 注释行以 # 开头

  • 配置任务格式 (* 为时间设置)

  • 时间设置

    | 第n个星星 | 含义 | |-------|---------------------------------------------------------------------| | 1 | minute 分钟 (0-59) | | 2 | hour 小时 (0-23) | | 3 | day of month (1-31) | | 4 | month 月份 (1-12) or jan, feb, mar, apr ... | | 5 | day of week(0-6) Sunday=0 or 7 or sun, mon, tue, wed, thr, fri, sat |

  • 时间配置符号

    | 符号 | 含义 | |----|--------| | , | 间隔时间 | | - | 连续时间 | | / | 每隔多久时间 | | * | 所有时间 |

    最小执行时间为每分钟

  • 例如执行定期备份数据的脚本:

    表示 root 用户每天凌晨 1:00 进入到 /etc/data_rsync 文件夹执行 python 脚本

命令示例 {#命令示例}

  • 指定用户 vvd 创建 crontab

  • 查看 crontab

  • 查看用户vvd的 crontab 文件

  • 删除用户计划任务

    -r 删除crontab,会删除整个文件,删除所有任务

编辑器选择 {#编辑器选择}

使用crontab设置定时任务时第一次执行"crontab -e"需要选择编辑器,如下所示

选择的时候 它提示第一个是最简单的,按它的建议选择第一个后,却用不惯

更换命令:使用命令 select-editor 重新选择编辑器,习惯使用的是 /usr/bin/vim.basic

选择完后 再重新输入"crontab -e"即可看到熟悉的vim编辑框

配置生效 {#配置生效}

  • 配置完计划任务后需要重启 cron 服务来使得改动生效

查看日志 {#查看日志}

  • 默认情况下可以在 /var/log/syslog 中看到 crontab 日志

计划任务示例 {#计划任务示例}

| 示例任务 | 含义 | |---------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------| | 45 4 1,10,22 * * /usr/bin/systemctl restart network | 每月1、10、22日的 4:45 重启network服务 | | 10 1 * * 6,7 /usr/bin/systemctl restart network | 每周六、周日的1:10重启network服务 | | */30 18-23 * * * /usr/bin/systemctl restart network | 每天18:00至23:00之间每隔30分钟重启network服务 | | 3,15 8-11 */2 * * /usr/sbin/reboot | 每隔两天的上午8点到11点的第3和第15分钟执行一次重启 | | 30 2 * * 7 /usr/bin/cp /etc/fstab /tmp/fstab-date "+\%F_\%T" | 每周日凌晨2点30分,运行cp命令对/etc/fstab文件进行备份,存储位置为/backup/fstab-YYYY-MM-DD-hh-mm-ss | | 0 4 1 1 * /usr/bin/systemctl restart smb | 一月一号的4点重启smb | | 0 23-0/1,1-7/1 * * * /usr/bin/systemctl restart smb 0 23,0,1,2,3,4,5,6,7 * * * /usr/bin/systemctl restart smb | 晚上11点到早上7点之间,每隔一小时重启smb | | 0 * * * * /usr/bin/systemctl restart smb | 每一小时重启smb |

示例 {#示例}

  • 以定时更新 git 仓库为例

  • 编写脚本:

  • 测试脚本:

  • 配置 conrtab:
  • 重启计划任务服务:
  • 确认效果:

  • 确实每2分钟更新过一次

  • 查看日志

  • crontab 正常运作

参考资料 {#参考资料}



文章链接:
https://www.zywvvd.com/notes/system/linux/linux-schedule-task/linux-schedule-task/

赞(0)
未经允许不得转载:工具盒子 » Linux 计划任务