在预定的时间运行和终止 bash 程序

在预定的时间运行和终止 bash 程序

我需要在 Ubuntu 16.04 上按预定时间(基于本地时间)运行 bash 程序。例如,这是我需要的:

周一至周四,上午 10 点至下午 6 点周五上午 10 点至周六下午 6 点bash runme.sh

一旦时钟结束,kill -9程序就开始执行。

实现这一目标的最佳方法是什么,也许通过 bash 脚本?

答案1

最简单但远非优雅的方法是编写一个小型进程监视器。

假设你的监视器名为monitor.sh,请在其中写入以下内容:

#!/bin/bash

# Runs your runme.sh in background
/location/of/your/runme.sh &

# Gets the PID of runme.sh
RUN_ME_PID=$!

# Sleeps how much time you need:
sleep 8h 

# Kills the process:
kill -9 $RUN_ME_PID

由于这是一项计划作业,因此请使用以下命令cron来启动它:

/etc/crontab将其附加到(as )的末尾root

# m h dom mon dow user  command
 00 10 *   *  1-4 tina  /location/of/your/monitor.sh > /your/output.log

对周五的批次执行相同的操作,但monitor.sh根据您的需要进行更改。

不要忘记标记monitor.sh为可执行文件:

$ chmod +x monitor.sh

有关更多信息,请查看 cronman-pages或一些有用的示例这里

答案2

您也可以使用该timeout函数。使用 timeout 8h runme.sh将运行您的脚本,并在 8 小时后(如果仍在运行)将其终止。因此,这意味着从周一到周六 10:00 启动 cronjob,持续 8 小时:

# Schedule cron for the time where it should start
# m h dom mon dow user  command
00 10 *   *  1-6 tina  /usr/bin/timeout 8h /your/scipt/runme.sh > /your/output.log

相关内容