Перезапуск службы часто реализуется через PID файл - I.e. идентификатор процесса записывается в некоторый файл и на основе этого номера команда останова будет убивать процесс (или до перезапуска).
Когда вы думаете об этом (или если вам это не нравится, поиск), вы обнаружите, что это проблематично, поскольку каждый PID может быть повторно использован. Представьте себе полный перезапуск сервера, когда вы вызываете "./your- script.sh start" при запуске (например, @reboot в crontab). Теперь ваш script.sh будет убивать произвольный PID, потому что он сохранил PID из живого до перезагрузки.
Обходное решение, которое я могу себе представить, это хранить дополнительную информацию, чтобы вы могли делать "ps -pid | grep ', и только если это вернет что-то, что вы его убьете. Или есть лучшие варианты с точки зрения надежности и/или простоты?
#!/bin/bash
function start() {
nohub java -jar somejar.jar >> file.log 2>&1 &
PID=$!
# one could even store the "ps -$PID" information but this makes the
# killing too specific e.g. if some arguments will be added or similar
echo "$PID somejar.jar" > $PID_FILE
}
function stop() {
if [[ -f "$PID_FILE" ]]; then
PID=$(cut -f1 -d' ' $PID_FILE)
# now get the second information and grep the process list with this
PID_INFO=$(cut -f2 -d' ' $PID_FILE)
RES=$(ps -$PID | grep $PID_INFO)
if [[ "x$RES" != "x" ]]; then
kill $PID
fi
fi
}