crontab的特殊标签 reboot

本文介绍了如何利用crontab的@reboot特殊标签在系统重启后自动删除文件锁,确保守护进程能正常启动。通过在crontab配置中加入@reboot命令,可以确保在其他定时任务执行前删除文件锁,避免因重启导致的守护进程无法启动的问题。此外,还列举了crontab其他常用的时间标签,如@yearly、@monthly等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这几天遇到一个问题,每个用户有一个守护进程,为了这个守护进程同时只运行一个,所以加了一个文件锁,然而机器要是重启的话,这个文件锁是没法删掉的,重启之后就导致守护进程无法启动了。

一直在找一钟机制,能够在crontab脚本运行之前执行,不是类似rc.d,因为这个是针对root账号,要处理到其他账号的文件锁,就需要针对每一个账号的文件锁都删除一遍,今天发现了crontab的特殊标签,reboot,可以在每次重启后执行一次,触发时机是在crontab其他定时任务之前执行,完美契合我的需求。

具体用法是这样的:

@reboot rm -f ~/monitor_running/monitor_daemon.sh.lock
* * * * * /home/bernie/monitor_running/monitor_daemon.sh
*/10 * * * * /home/bernie/monitor_running/bash/get_branches_list.sh

这样就可以保证在daemon进程运行之前,先将文件锁删除,设置好最初状态。

同时,crontab 还有其他的特殊标签,如下

@reboot    :    Run once after reboot.      重启时执行一次
@yearly    :    Run once a year, ie.  "0 0 1 1 *".  一年执行一次,1月1号0点0分执行
@annually  :    Run once a year, ie.  "0 0 1 1 *". 一年执行一次,1月1号0点0分执行
@monthly   :    Run once a month, ie. "0 0 1 * *". 一月执行一次,每月1号0点0分执行
@weekly    :    Run once a week, ie.  "0 0 * * 0". 一周执行一次
@daily     :    Run once a day, ie.   "0 0 * * *".  一天执行一次
@hourly    :    Run once an hour, ie. "0 * * * *".  一小时执行一次

### 如何通过 `crontab` 定时执行系统重启 在 Linux 中,可以通过配置 `crontab` 来定期执行系统重启操作。以下是实现这一功能的具体方法: #### 配置 `crontab` 执行系统重启 要设置一个定时任务来重启系统,可以编辑当前用户的 `crontab` 文件或者系统的全局 `crontab` 文件。使用以下命令进入编辑模式[^2]: ```bash sudo crontab -e ``` 在打开的文件中,添加一行用于定义何时以及如何执行系统重启的任务。例如,如果希望每天凌晨 2 点自动重启系统,则可以在文件中加入如下内容: ```bash 0 2 * * * /sbin/reboot ``` 上述表达式的含义分解为: - `0`: 表示分钟字段,即第 0 分钟; - `2`: 小时字段,表示时间为凌晨 2 点; - `* * *`: 日、月和星期几均设为通配符,意味着每天都适用。 此条目会告诉操作系统,在每日凌晨两点触发 `/sbin/reboot` 命令以完成重启动作[^4]。 #### 注意事项 为了确保该计划能够正常工作,请确认以下几个方面: 1. **权限问题**: 使用 `sudo` 提升权限是因为修改或新增系统级别的周期性任务通常需要管理员权利。 2. **路径指定**: 明确写出可执行程序的绝对路径(如上例中的 `/sbin/reboot`),而非仅仅依赖环境变量 PATH 的设定。 3. **日志记录**: 可能还需要考虑增加一些额外的日志机制以便追踪每次启动的原因及状态变化情况。比如将输出重定向到某个文件里保存下来作为后续分析依据: ```bash 0 2 * * * /sbin/reboot >> /var/log/system_reboots.log 2>&1 ``` #### 删除已有的 Cron Job 假如之后不再需要这个定时器了,那么可以直接移除对应的 cron entry 或者干脆清除所有的 cron jobs 。对于前者来说只需再次调用 `crontab -e`, 并手动删掉不需要的那一行即可;而后者则更为简单粗暴些——只需要一条指令就能达成目的 : ```bash sudo crontab -r ``` 这将会把整个列表里的项目都给抹去。 ```bash # Example of scheduling a daily reboot at 2 AM. 0 2 * * * /sbin/reboot ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值