следующий быстрый хак (сохраненный как run-periodically.sh
) может сделать правильную вещь:
#!/bin/bash
interval=5
start=$(date +%s)
while true; do
# run jobs in the background
for i in 1 2 3 4; do
"$@" &
done
# wait for all background jobs to finish
wait
# figure out how long we have to sleep
end=$(date +%s)
delta=$((start + interval - end))
# if it's positive sleep for this amount of time
if [ $delta -gt 0 ]; then
sleep $delta || exit
fi
start=$((start + interval))
done
если вы поместите этот скрипт в подходящее место и сделаете его исполняемым, вы можете запустить его следующим образом:
run-periodically.sh imagesnap arg1 arg2
но во время тестирования я запустил:
sh run-periodically.sh sh -c "date; sleep 2"
, что приведет к параллельному запуску четырех копий «запуска оболочки, которая отображает дату, а затем ждет пару секунд».interval
секунд.если вы хотите запускать разные вещи в разных заданиях, то вы можете явно включить их в этот скрипт или, может быть, в другой скрипт, который он вызывает ...