4.9 脚本和计划任务

4.9 脚本和计划任务 #

4.9.1 脚本优先级控制 #

可以使用 nice 和 renice 调整脚本优先级。

nice 命令用于启动一个新进程,并设置其优先级。通过指定一个优先级值(范围从 -20(最高优先级)到 +19(最低优先级)),可以告诉操作系统如何在调度进程时优先考虑它们。较低的优先级值意味着更高的优先级。

例如,要在启动一个进程时设置较低的优先级,可以使用以下命令:

nice -n 10 command

上述命令将启动一个新的进程 command,并将其优先级设置为 +10。需要注意的是,使用 nice 启动的进程的优先级相对于默认值进行了调整。

renice 命令用于修改已经运行的进程的优先级。可以使用 renice 命令将已经运行的进程的优先级增加或降低。

例如,要将进程的优先级提高到较高值,可以使用以下命令:

renice -n -5 <PID>

上述命令将进程 的优先级降低了 5。

更改进程的优先级需要适当的权限。通常,只有具有足够权限(如 root 用户或具有 CAP_SYS_NICE 权限的用户)才能增加或降低进程的优先级。

脚本避免出现 “不可控的” 死循环,死循环导致 cpu 占用过高,死循环导致死机。

4.9.2 捕获信号 #

  • kill 默认会发送 15 号信号给应用程序
  • ctrl + C 发送 2 号信号给应用程序
  • 9 号信号不可阻塞,kill -9 不能进行捕获

trap 命令可以用来捕获信号。

4.9.3 计划任务 #

一次性计划任务 #

一次性计划任务使用的是 at 命令,如果没有 at 命令可以先通过 yum 或 apt 安装。

安装 at 成功后可以使用 systemctl start atd 命令启动:

利用 at 编写完任务后,可以使用 Ctrl+d 进行提交:

atq 命令可以查看等待执行的 at 任务:

周期性计划任务 #

周期性计划任务可以使用 cron。最小一分钟执行一次,如果需要支持秒级,需要一些其他的扩展包支持。

配置方式:

crontab -e

查看现有的计划任务

crontab -l

配置格式:

分钟 小时 日期 月份 星期 执行的命令

需要注意命令的路径,比如如下的任务:

* * * * * /bin/date >> /tmp/date.txt

可以先通过 which 查看 date 命令的路径,这里最好写绝对路径。

cron 的日志文件在 /var/log/cron:

如果是凌晨 3 点整,第一位是 0 不是 *

anacrontab #

anacrontab 是用于设置和管理 Anacron 定时任务的命令。Anacron 是一个用于在 Linux 系统上运行延迟启动任务的工具,它可以确保即使在系统关机期间也能执行任务。

下面是使用 anacrontab 的基本步骤:

使用文本编辑器打开 anacrontab 文件。该文件位于 /etc/anacrontab。需要以 root 或具有适当权限的用户身份执行此操作。

vim /etc/anacrontab

在 anacrontab 文件中,每行定义了一个定时任务。每行的格式如下:

# <周期> <延迟> <作业标识> <命令>
1 5 mycron /path/to/myscript
  • <周期> 是指任务执行的间隔(以天为单位)。
  • <延迟> 是任务启动的延迟时间(以分钟为单位)。
  • <作业标识> 是任务的唯一标识符,用于识别任务。
  • <命令> 是要运行的命令或脚本。

可以根据需要添加、修改或删除任务行。保存并关闭 anacrontab 文件。重新加载 Anacron 服务,以便应用新的配置:

sudo service anacron reload

之后,定时任务将根据 anacrontab 文件中的定义在系统上执行。

对于非特权用户,只有管理员或具有适当权限的用户才能编辑 anacrontab 文件。在编辑或修改 anacrontab 文件之前,请务必备份原始文件,并确保理解每个字段的含义和配置的影响。

flock #

如果发生多次运行的情况,可以使用 flock 锁文件的方式避免。