Так что у меня этот Баш скрипт:Bash сценарий: `Выход 0` не удается выйти
#!/bin/bash
PID=`ps -u ...`
if [ "$PID" = "" ]; then
echo $(date) Server off: not backing up
exit
else
echo "say Server backup in 10 seconds..." >> fifo
sleep 10
STARTTIME="$(date +%s)"
echo nosave >> fifo
echo savenow >> fifo
tail -n 3 -f server.log | while read line
do
if echo $line | grep -q 'save complete'; then
echo $(date) Backing up...
OF="./backups/backup $(date +%Y-%m-%d\ %H:%M:%S).tar.gz"
tar -czhf "$OF" data
echo autosave >> fifo
echo "$(date) Backup complete, resuming..."
echo "done"
exit 0
echo "done2"
fi
TIMEDIFF="$(($(date +%s)-STARTTIME))"
if ((TIMEDIFF > 70)); then
echo "Save took too long, canceling backup."
exit 1
fi
done
fi
В основном, сервер принимает входные данные из FIFO и выходов Server.log. Функция fifo используется для отправки команд stop/start на сервер для автосохранения. В конце, как только он получит сообщение от сервера, что сервер завершил сохранение, это каталог данных tar и начинает сбрасываться снова.
На линии exit 0
у меня возникают проблемы. Все выполняется отлично, но я получаю этот результат:
srv:scripts $ ./backup.sh
Sun Nov 24 22:42:09 EST 2013 Backing up...
Sun Nov 24 22:42:10 EST 2013 Backup complete, resuming...
done
Но он висит там. Обратите внимание, что «сделано» эхом, но «done2» терпит неудачу. Что-то заставляет его висеть на exit 0
.
ADDENDUM: Просто, чтобы избежать путаницы для людей, глядя на это в будущем, он висит на выходной линии и никогда не возвращается в командной строке. Не уверен, насколько я был достаточно ясен в своем первоначальном описании.
Любые мысли? Это весь скрипт, ничего больше не происходит, и я называю его прямым от bash.
«Выход 0 не может выйти»? Вы сами это видите, это выход: P –