Linux设置定时任务常用的三种方法

一、定义

  Linux定时任务是一种自动化工具,允许用户和系统管理员在预定的时间自动执行脚本、命令或程序。这些任务通常用于日常的系统维护、数据备份、监控和报告等。

二、使用cron设置定时任务

 1)定义:

      cron是Linux中最常用的定时任务调度器。它允许用户在指定的日期和时间运行脚本和命令。使用cron设置定时任务的三种方法:编辑用户的crontab文件、使用预定义的cron目录、在/etc/crontab文件中添加任务

 2)编辑用户的crontab文件

     ①定义:该方式用于单个用户设置定时任务。

     ②打开用户的crontab文件命令如下:crontab -e

     ③在crontab文件中,添加一行来定义定时任务,格式如下:分 时 日 月 周 命令

       [示例] 0 1 * * * /path/to/script.sh (每天凌晨3点运行脚本)

 3)使用预定义的cron目录

    Linux系统通常包含一些预定义的目录,用于存放定期执行的脚本,目录如下:

  • /etc/cron.daily
  • /etc/cron.hourly
  • /etc/cron.weekly
  • /ect/cron.monthly

   系统将按照目录名称指定的频率执行这些脚本。另外还需要将脚本添加执行权限。例如:chmod +x /path/to/script.sh

 4)在/ect/crontab文件中添加任务

  对于系统级的任务,可以直接在/ect/crontab文件中添加,添加方法和用户的crontab文件中添加方法差不多,但多了一个用户的字段,格式如下:分 时 日 月 周 用户 命令

    [示例] 0 3 * * * root /path/to/script.sh

三、使用at设置定时任务

 1)定义

     该指令用于设置一次性任务,它会在指定的时间运行一次任务。它允许制定将在未来某个时间点执行的命令。

 2)安装at

  在某些Linux发型版中,at服务可能默认没有安装,可以使用包管理器进行安装:

①sudo apt-get install at (debian/ubuntu系统)

②sudo yum install at (redhat/centos系统)

 3)启动at服务

   启动并设置开机自动启动:

  • sudo systemctl start atd
  • Sudo systemctl enable atd

 4)使用at设置定时任务

     使用at后跟执行任务的时间来设置定时任务。at接受多种时间格式

     [示例1] echo "/path/to/script.sh" | at 22:30 (在今年下午10:30执行脚本)

     [示例2] echo "/path/to/script.sh" | at now + 30 minutes (在当前时间之后的30分钟执行脚本)

 5)管理at任务

   ①列出待执行的at任务,使用命令如下:atq

   ②删除at任务,使用命令如下:atrm <job number>

   可以查看任务脚本中制定的日志文件或输出文件,来检查任务执行状态。

四、使用systemd定时器设置定时任务

 1)定义

     systemd定时器是一种替代穿透cron的方法,用于安排定时任务。systemd定时器由两个部分组成:一个.service文件和一个.timer文件。.service文件定义了要执行的任务,而.timer文件设定了何时执行这个任务。

 2)创建服务文件(.service)

    创建一个.service文件来定义要执行的任务,例如:

     ①创建 /etc/systemd/system/mytask.service文件,文件内容如下

    ②脚本添加执行权限:chmod +x /root/chechIP.sh

 3)创建.timer文件

    .service文件创建完成后,还需要创建一个定时器文件(.timer),例如:

     ①创建 /ect/systemd/system/mytask.timer文件,文件内容如下

  ②systemd定时器可用选项:

选项

描述

OnActiveSec

定时器生效后,多少时间开始执行任务。如:OnActiveSec=1h表示一小时执行一次任务;

OnUnitActiveSec=*-*-* 02:00:00表示每天凌晨两点执行;OnUnitActiveSec=Mon *-*-* 02:00:00表示每周一凌晨两点执行。

OnBootSec

系统启动后,多少时间开始执行任务

OnStartupSec

systemd进程启动后,多少时间开始执行任务

OnUnitActiveSec

该单元上次执行后,等多少时间再次执行

OnUnitlnactiveSec

定时器上次关闭后多少时间,再次执行

OnCalendar

基于绝对时间,而不是相对时间执行。如:

OnCalendar=*-*-* *:*:00 表示每分钟触发一次定时器执行,OnCalendar=*-10-15 00:00:00 表示每年的10月11号执行,OnCalendar=*-*-* 01:00:00 表示每天凌晨 1 点触发执行。

AccuracySec

如果任务必须推迟执行,推迟的最大秒数,默认是60秒

Unit

要执行的实际任务,通常是同名的带有.service后缀的单元

Persistent

如果设置了该字段,即时定时器到时没有启动,也会自动执行相应的单元

WakeSystem

如果系统休眠,是否自动唤醒系统

OnCalendar 配置使用 systemd 时间格式,可以设置为具体的时间点,也可以使用其它更复杂的时间规则。

Persistent=true 表示如果错过了某次执行(比如系统未运行),下次启动时将会尽快执行该任务。如有任务的需要定时执行需要精确到秒,在基于systemd的系统上,则可以通过计时器systemd.timer来实现精确到秒的计划任务。

4)定时器使用相关命令

操作

命令

重新加载systemd配置

sudo systemctl daemon-reload

启动定时器

sudo systemctl start mytask.timer

设置定时器在启动时自动启动

sudo systemctl enable mytask.timer

查看定时器状态

systemctl status mytask.timer

列出所有定时器

systemctl list-timers

查看日志(调试或检查任务执行情况)

journalctl -u mytask.service

 注意:确保 .service 和 .timer 文件的命名一致并且放置在正确的目录中,通常是 /etc/systemd/system/。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值