Linux定时执行脚本

 
更多

在Linux系统中,我们经常需要定时执行一些脚本任务,比如备份数据、清理日志等。Linux提供了多种方式来实现定时执行脚本的功能,本文将为大家介绍一些常用的方法。

1. 使用cron定时器

Cron是一个Linux系统中经常使用的定时器,可以在指定的时间点或周期性地执行相应的脚本任务。使用Cron可以实现非常灵活的定时任务设置。

安装Cron

如果你的系统中没有安装Cron,可以使用以下命令安装:

$ sudo apt-get install cron

编写Cron定时任务

在Linux系统中,Cron的配置文件位于/etc/crontab,我们可以编辑这个文件来添加定时任务。

打开终端,执行以下命令编辑Cron配置文件:

$ sudo vi /etc/crontab

在打开的文件中,可以看到如下示例:

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

其中m h dom mon dow user command部分表示定时任务的执行频率,具体含义如下:

  • m: 分钟(范围:0-59)
  • h: 小时(范围:0-23)
  • dom: 每月第几天(范围:1-31)
  • mon: 月份(范围:1-12)
  • dow: 星期几(范围:0-7,其中0和7都表示星期日)
  • user: 执行该任务的用户
  • command: 执行的命令或脚本

我们可以按照需求修改这些参数,添加自己的定时任务。例如,如果要每天执行一个脚本文件/home/user/myscript.sh,在/etc/crontab中添加如下行:

30 5 * * * user /home/user/myscript.sh

以上示例表示每天的5点30分执行/home/user/myscript.sh脚本文件。

重启Cron服务

修改了Cron配置后,需要重启Cron服务使其生效:

$ sudo systemctl restart cron

2. 使用at命令

除了Cron定时器,Linux还提供了at命令,可以在指定的时间点执行一次性任务。

安装at

如果你的系统中没有安装at命令,可以使用以下命令安装:

$ sudo apt-get install at

编写at任务

使用at命令可以轻松地设置一次性的定时任务。

$ at <time>

其中<time>表示任务的执行时间,可以使用相对时间(例如+10 minutes,表示10分钟后执行)或绝对时间(例如13:00,表示13点整执行)。

在at命令的交互环境中,输入要执行的命令或脚本内容,然后按下Ctrl + D组合键保存并提交任务。

查看at任务

使用以下命令可以查看已经设置的at任务:

$ atq

取消at任务

如果需要取消已经设置的at任务,可以使用以下命令:

$ atrm <job-id>

其中<job-id>是通过atq命令查看到的任务编号。

3. 使用系统定时器服务

除了Cron和at命令外,Linux还提供了Systemd的定时器服务systemd-timers,可以实现更高级的定时任务功能。

编写Systemd定时任务

Systemd定时任务使用.timer.service文件组成,.timer文件用于指定任务的触发条件和执行频率,.service文件用于指定任务的具体执行内容。

以下是一个示例的Systemd定时任务:

创建文件/etc/systemd/system/mytimer.timer,并添加如下内容:

[Unit]
Description=My Timer

[Timer]
OnCalendar=*-*-* 10:00:00
Persistent=true

[Install]
WantedBy=timers.target

创建文件/etc/systemd/system/mytimer.service,并添加如下内容:

[Unit]
Description=My Timer Service

[Service]
ExecStart=/usr/bin/bash /home/user/mycommand.sh

[Install]
WantedBy=default.target

在以上示例中,.timer文件中的OnCalendar参数指定了每天的10点触发任务执行,而.service文件中的ExecStart参数指定了要执行的命令或脚本文件。

使Systemd定时任务生效

在创建了.timer.service文件后,需要运行以下命令使Systemd定时任务生效:

$ sudo systemctl daemon-reload
$ sudo systemctl enable mytimer.timer
$ sudo systemctl start mytimer.timer

以上命令将重新加载Systemd配置、启用定时器和启动定时器。

总结

本文介绍了在Linux系统中使用Cron、at和Systemd定时器来实现定时执行脚本的功能。通过学习这些方法,您可以根据需要设置各种复杂的定时任务,提高系统的自动化功能。希望本文对您有所帮助,谢谢阅读!

参考资料:

  • Linux命令之cron 定时任务定时器(上)
  • Linux命令之cron 定时任务定时器(下)
  • HowTo: Add Jobs To cron Under Linux or UNIX?

打赏

本文固定链接: https://www.cxy163.net/archives/8287 | 绝缘体

该日志由 绝缘体.. 于 2020年03月15日 发表在 未分类 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: Linux定时执行脚本 | 绝缘体

Linux定时执行脚本:等您坐沙发呢!

发表评论


快捷键:Ctrl+Enter