Beri bash i ebash / Говнокод #27988 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
stop() {
  PIDS=$(/sbin/pidof $PNAME)
  CNT=0
  if [[ $PIDS != "" ]]; then
	echo -n "Stopping $PNAME: "
	killall $PNAME && echo "ok" || echo "failed"
  	while [[ $PIDS != "" ]]
  	do 
  		PIDS=$(/sbin/pidof $PNAME)
		echo -n "."
		sleep 1
		CNT=$(($CNT+1))
		if [[ $CNT -eq 3 ]]; then killall -9 $PNAME;echo -e "\n$PNAME: Force kill";break; fi
  	done
  	echo 
  else echo "$PNAME: don't start"
  fi
}

Так автор видел выключение процесса. Процесс работает с файлами на жестком диске и ему важна их целостность, поэтому за 3 секунды не завершался. А еще при gracefully shutdown пишется обновление конфига процесса на диск. Но кого волнуют такие мелочи если оно уже работает в проде 7+ лет

Запостил: codemeow codemeow, (Updated )

Комментарии (9) RSS

  • > ему важна их целостность

    Возможно, тогда стоило бы прикрутить какую-то базу данных или запилить свою механику, которая даёт какую-то степень транзакционности... Хотя бы save('conf.tmp'), replace('conf.cfg', 'conf.tmp') для конфига.

    Всё-таки и процесс может упасть и железка может ребутнуться.
    Ответить
    • Именно для этой цели голландцы придумали WAL
      Ответить
      • Возможно, что WAL им некогда вести т.к. реалтайм какой-нибудь и время для сохранения находится только при выключении.
        Ответить
      • Ну кстати tr_saveFile(), через который запилена эта функция, вроде корректно сделан, через .tmp файл. Т.е. просто настройки не сохранятся, а не весь конфиг навернётся...

        Не так ужасно, как мне показалось сначала. Просто бывают проги, у которых необратимое повреждение от kill -9 во время записи.
        Ответить

Добавить комментарий

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8