在Unix中的特定时间范围内运行脚本

时间:2014-06-11 17:05:47

标签: shell unix

我有一个问题。我想在上午10点到下午4点之间运行我的脚本。意思是我想在上午10点开始它并且如果它仍在运行则在下午4点被杀死。 如果我使用cron * 10-15 *** - 它是否意味着该过程将在16处被杀死,或者只意味着它只能在上午10点到下午4点之间启动?

谢谢!

4 个答案:

答案 0 :(得分:1)

将脚本的形式更改为类似服务的内容:

#!/bin/bash

PID_FILE=/var/run/my_script_pid

function work {
    # Do your stuffs here.
    ...
}

function start {
    work "$@" &
    disown
    echo "$!" > "$PID_FILE"
}

function stop {
    kill "$(<"$PID_FILE")"
}

"$@"

然后在cron中以/path/to/your/script.sh start args运行您的脚本。

在cron中将其作为/path/to/your/script.sh stop停止。

脚本可以通过检查和填充来改进并变得更加坚固,但是你得到了这个概念。

答案 1 :(得分:0)

一旦启动了cron,cron就不会杀死它们。处理这种情况的常用方法是使用cron启动脚本,并使用脚本启动实际作业,脚本记录作业的PID。安排另一个工作来检查具有该PID的进程是否存在,如果存在则将其终止。

答案 2 :(得分:0)

Cron没有杀死工作,它只创造了它们。考虑到cron line,cron将在上午10点到下午3点之间每小时开始一项新工作。如果要限制进程的运行时间,则需要捕获PID并在间隔后将其终止 - 所以在脚本中就是这样的,

pid=$$ (sleep 18000 && kill $pid) &

会在18000秒(或5小时)后终止该过程。

答案 3 :(得分:0)

如果您只想在上午10点开始编写脚本并在下午4点将其删除,则可以在自己的crontab(或类似于/etc/crontab)中插入两个条目,如下所示:

user@linubox:~$ crontab -l
# m h  dom mon dow   command
00 10 * * * /PATH/TO/MY_SCRIPT
00 16 * * * kill `ps ax | grep MY_SCRIPT | head -1 | awk '{print $1}'`

要以这种方式杀死的MY_SCRIPT,必须是进程列表中的唯一名称。

HTH,

马塞罗