1. bash / Говнокод #27988

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 04 Февраля 2022

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

    • Всегда успевало сохраниться за 3 секунды?
      Ответить
    • > ему важна их целостность

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

      Всё-таки и процесс может упасть и железка может ребутнуться.
      Ответить
      • Именно для этой цели голландцы придумали WAL
        Ответить
        • Возможно, что WAL им некогда вести т.к. реалтайм какой-нибудь и время для сохранения находится только при выключении.
          Ответить
      • https://github.com/transmission/transmission/blob/main/daemon/daemon.cc#L777
        Ответить
        • Ну кстати tr_saveFile(), через который запилена эта функция, вроде корректно сделан, через .tmp файл. Т.е. просто настройки не сохранятся, а не весь конфиг навернётся...

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

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