Удалите бессмысленные execs и ту часть, где вы передаете половину команды после --:
su -s /bin/sh -c "test.python $FULLPATH | ts '[%Y-%m-%d %H:%M:%S]'" &> log
Это зависит от того, насколько надежным вы хотите, чтобы это было. Простое решение, запускающее «следующую» программу в круговом списке, может выглядеть следующим образом:
#! /usr/bin/env bash
programs=(program1 program2 program3 program4 program5)
state=$HOME/.${0#*/}_state
if [ -f "$state" ]; then
read idx <"$state"
if expr "$idx" : '[0-9][0-9]*$' >/dev/null; then
let idx=(idx+1)%${#programs[@]}
else
let idx=0
fi
else
let idx=0
fi
printf '%d\n' "$idx" >"$state" || exit 1
exec "${programs[$idx]}" "$@"
Если вам нужно что-то более надежное, вам нужна блокировка и, вероятно, сохранение состояния в базе данных.