You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何修改/etc/crontab,以root身份实现指定时段的进程启停控制?

如何通过/etc/crontab实现特定时段终止进程(含例外窗口)

咱们一步一步来搞定这个需求:要以root身份在周一至周六的08:00-16:00每隔一分钟终止目标进程,但给12:00-12:30、16:00-次日07:59留足进程运行的时间。

核心思路

crontab的时间规则是分钟 小时 日 月 星期,而/etc/crontab还多了一个「执行用户」字段。我们需要把要杀进程的时段拆分成三个部分,避开12:00-12:29的窗口,同时让16:00之后到次日07:59完全不执行杀进程命令。

具体步骤

1. 确定目标进程的匹配方式

首先得明确要终止的进程,推荐用pkill -f来匹配进程的完整命令行(避免误杀同名进程)。比如你的进程是my_annoying_process,命令就是:

pkill -f "my_annoying_process" || true

加上|| true是为了防止进程不存在时crontab发送错误邮件,让命令执行始终返回成功状态。

2. 编辑/etc/crontab

用root权限打开/etc/crontab(比如用vimnano):

sudo nano /etc/crontab

在文件末尾添加以下三个条目(注意替换my_annoying_process为你的实际进程名):

# 周一至周六 08:00-11:59 每分钟杀进程
* 8-11 * * 1-6 root pkill -f "my_annoying_process" || true

# 周一至周六 13:00-15:59 每分钟杀进程
* 13-15 * * 1-6 root pkill -f "my_annoying_process" || true

# 周一至周六 12:30-12:59 每分钟杀进程
30-59 12 * * 1-6 root pkill -f "my_annoying_process" || true

3. 让crontab生效

大多数现代系统会自动加载/etc/crontab的修改,但保险起见可以重启cron服务:

  • 基于systemd的系统(如Ubuntu 16.04+、CentOS 7+):
    sudo systemctl restart cron
    
  • 基于init的系统(如CentOS 6):
    sudo service crond restart
    

4. 验证配置

可以用以下命令检查/etc/crontab里的规则是否正确:

grep "my_annoying_process" /etc/crontab

规则解释

  • 第一个条目:* 8-11 * * 1-6 表示周一到周六的8点到11点,每分钟执行一次杀进程命令。
  • 第二个条目:* 13-15 * * 1-6 覆盖周一到周六的13点到15点,每分钟执行。
  • 第三个条目:30-59 12 * * 1-6 只在周一到周六的12点30分到59分执行,避开了12:00-12:29的窗口。
  • 16:00之后到次日07:59没有对应的crontab条目,所以不会执行杀进程命令,进程可以正常运行。

内容的提问来源于stack exchange,提问作者user786034

火山引擎 最新活动