我需要在 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