Я хочу запустить несколько сценариев после загрузки. Когда машина загружается, запускается один сценарий и принудительно перезагружается. Затем, после перезагрузки, запускался другой сценарий, а затем перезагружался. Нужно, чтобы это повторилось примерно четыре раза. Возможно ли это?
Да, это возможно. Вы можете сохранить текущий статус системы в файл журнала. Затем главный сценарий может прочитать последний записанный статус и условно запустить определенный сценарий или функцию. Вот пример такого сценария:
$ cat ~/status-reboot.sh
#!/bin/bash
STATUS_LOG="$HOME/our.status.log"
# Determinate whether the log file exists ? get the status : set status0
if [[ -f $STATUS_LOG ]]
then
CURRENT_STATUS="$(cat "$STATUS_LOG")"
else
CURRENT_STATUS="stage0"
echo "$CURRENT_STATUS : $(date)"
echo "$CURRENT_STATUS" > "$STATUS_LOG"
# You could reboot at this point,
# but probably you want to do action_1 first
fi
# Define your actions as functions
action_1()
{
# do the 1st action
CURRENT_STATUS="stage1"
echo "$CURRENT_STATUS : $(date)"
echo "$CURRENT_STATUS" > "$STATUS_LOG"
exit # You could reboot at this point
}
action_2()
{
# do the 2nd action
CURRENT_STATUS="stage2"
echo "$CURRENT_STATUS : $(date)"
echo "$CURRENT_STATUS" > "$STATUS_LOG"
exit # You could reboot at this point
}
case "$CURRENT_STATUS" in
stage0)
action_1
;;
stage1)
action_2
;;
stage2)
echo "The script '$0' is finished."
;;
*)
echo "Something went wrong!"
;;
esac
Вот как он работает в командной строке:
$ ./status-reboot.sh
stage0 : Thu Aug 6 22:45:29 EEST 2020
stage1 : Thu Aug 6 22:45:29 EEST 2020
$ ./status-reboot.sh
stage2 : Thu Aug 6 22:45:33 EEST 2020
$ ./status-reboot.sh
The script './status-reboot.sh' is finished.
$ ./status-reboot.sh
The script './status-reboot.sh' is finished.
Я думаю, он должен работать без проблем с записью crontab следующим образом:
@reboot sleep 15 && "$HOME/status-reboot.sh" >> "$HOME/our.progress.log"