如何在不使用cron的情况下在linux上运行预定脚本?

时间:2017-03-15 04:27:43

标签: linux shell sh

我是linux和shell脚本的新手,任何人都可以帮我创建一个.sh文件,每5小时自动执行一次而不使用cron job

2 个答案:

答案 0 :(得分:2)

这里的正确解决方案绝对是cron,因为它专门用于处理定期执行。如果由于某种原因你需要避免使用它,下面是一些重复执行固定命令的脚本的简单示例。

这是一个天真的解决方案,可以完成工作。

#!/bin/sh

while true; do
    my_command
    # sleep 5 hours
    sleep $((5 * 60 * 60))
done

如果命令运行的时间可以忽略不计,那么这将每五个小时运行一次命令,因为作业是同步运行的。如果该命令需要一个小时才能运行,那么它将每六个小时运行一次。

如果您需要每五个小时运行一次,您可以执行以下操作。 此命令在/var/run中创建一个锁文件,该文件在作业运行时存在,并在作业停止时删除。这可以防止多个作业实例同时运行。主循环将在my_command完成后等待五个小时才能完成,并且每隔60秒检查一次锁定文件是否已被删除。

#!/bin/sh

lockfile=/var/run/my_command.lock
[ -f "$lockfile" ] && {printf 'lockfile already exists\n'; exit 1;}
while true; do
    if [ ! -f "$lockfile" ]; then
        touch "$lockfile"
        (my_command ; rm "$lockfile") &
        sleep $((5 * 60 * 60))
    else
        printf '%s\n' "skipping! process is already running"
        sleep 60
    fi
done

答案 1 :(得分:0)

您可以在脚本中使用at命令在certian时间之后重新安排它。 您可以在.sh脚本的末尾添加类似的内容 at now +5 hours ~/myscript.sh

因此,每当您的脚本完成执行时,它将在5小时后重新安排执行。这种方法有其缺点,使用cron将是理想的方式。