我制作了一个简单的脚本,每分钟执行一个命令:
#!/usr/bin/env sh
while true; do
exec "$@"
sleep 60
done
我们的想法是让它成为一个Docker 入口点这将允许我运行 Laravel 调度程序。但在构建图像之前,我想对其进行测试:
$ ./entrypoint/entrypoint_cron.sh echo "Hello"
Hello
但该命令只执行一次。为什么?如何使参数中提供的命令连续循环运行,直到我用Ctrl+终止它C?
答案1
该exec
命令将当前进程替换为新进程。成功执行意味着没有任何东西可以继续执行脚本。
POSIX( 的文档sh
,另见man sh
)写道像这样,
如果
exec
用command指定,则用command替换shell,而不创建新进程。如果指定了参数,则它们应是命令的参数。
也许你的意思是这个?
#!/bin/sh
while true
do
"$@"
sleep 60
done