我是linux和shell脚本的新手,任何人都可以帮我创建一个.sh文件,每5小时自动执行一次而不使用cron job
答案 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将是理想的方式。