Follow

Ничего не понимаю.
Написал простой юнит для запуска сервера. Сервер штатно стартует, по логам штатно завершается, но с кодом 1 вместо 0. Из-за этого systemd пишет статус failed. При ручном запуске и торможении с помощью Ctrl+С такая же шляпа.
Если застопорить сервер командой "/quit" через его консоль, то сервер завершается с кодом 0.
Хоть городи запуск в screen на манер minecraft. Еще можно добавить `SuccessExitStatus=1`, но это какой-то совсем костыль.

@rf

· · Web · 1 · 3 · 0

@radjah @rf а если ему не ^C (SIGINT), а SIGTERM отправить (15 сигнал), он тоже с 1 выходит?

Если да, то авторы - говокодеры.

// но это не повод извращаться со скрином, достаточноп ростого скрипта-враппера.

@mva
Да, тоже 1 возвращает.

> Если да, то авторы - говокодеры.

Видимо, но сделали очень годную синхронизацию между клиентами.

> скрипта-враппера

Запускать из скрипта, а в конце делать "exit 0"? Я никогда подобное не делал.

@rf

@radjah Лучше проверять код и если 1, то 0 на выходе, а если что-то другое, то отдавать как есть. Вдруг что-то действительно сломается?

@mva

@Taciturn @mva я всё равно даже близко код скрипта не представляю.

@radjah @Taciturn
```
#!/bin/sh
/path/to/your/binary "${@}"
exit 0
```
(так - будет выходить всегда "успешно", даже если упало или ещё чего).
Альтернативно - можно `exit 0` заменить на
```
exitcode=$?
if [ $exitcode == 1 ]; then
exit 0
else
exit $exitcode
fi
```

@mva
У меня вопрос. SIGTERM по идее будет посылаться sh, а не "/path/to/your/binary", или я чего не понимаю?

@Taciturn

@mva
Получилось ещё хуже. systemd прибивает скрипт, потом прибивает сервер, который сразу выключается, не сохраняя карту.

```
factorio-wrapper.sh[7904]: 33.985 Received SIGTERM, shutting down
factorio-wrapper.sh[7904]: 33.985 Quitting: signal.
factorio-wrapper.sh[7904]: 33.985 Info MainLoop.cpp:417: Saving map as /opt/factorio/data/radjah-new.zip
factorio-wrapper.sh[7904]: 33.986 Received second SIGTERM, terminating immediately
```

Код у меня не форматируется. :(

@Taciturn

@radjah @Taciturn ну, тут вопрос в том, кто ему второй TERM послал.
Судя по выводу, он именно поэтому карту и не сохранил, что получил второй TERM.

С этим уже можно бороться `trap`'ами в коде скрипта.

Ну и шишемде в юните неплохо бы подкрутить таймауты посылания сигналов, чтобы дожидалась нормально.

@mva
Чет идея загнаться со screen уже не кажется такой безумной. %)

@Taciturn

Sign in to participate in the conversation
Mastodon

lor.sh is yet another mastodon instance.