4.9 脚本和计划任务 #
4.9.1 脚本优先级控制 #
可以使用 nice 和 renice 调整脚本优先级。
nice 命令用于启动一个新进程,并设置其优先级。通过指定一个优先级值(范围从 -20(最高优先级)到 +19(最低优先级)),可以告诉操作系统如何在调度进程时优先考虑它们。较低的优先级值意味着更高的优先级。
例如,要在启动一个进程时设置较低的优先级,可以使用以下命令:
nice -n 10 command
上述命令将启动一个新的进程 command,并将其优先级设置为 +10。需要注意的是,使用 nice 启动的进程的优先级相对于默认值进行了调整。
renice 命令用于修改已经运行的进程的优先级。可以使用 renice 命令将已经运行的进程的优先级增加或降低。
例如,要将进程的优先级提高到较高值,可以使用以下命令:
renice -n -5 <PID>
上述命令将进程
更改进程的优先级需要适当的权限。通常,只有具有足够权限(如 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 锁文件的方式避免。