В этой статье рассказывается, как запустить команду в фоновом режиме с помощью nohup.

Проблема

Представьте, что вы создаете скрипт, который запускает redis-server, а затем redis-cli:

redis-server
redis-cli

redis-cli никогда не запускается, так как redis-server работает вечно.

Решение

Одним из решений является запуск redis-server в фоновом режиме с &:

redis-server &

Однако, чтобы запустить redis-server без зависаний, используйте nohup:

nohup redis-server &

Вывод redis-server сохраняется в nohup.out:

cat nohup.out

Чтобы передать аргумент redis.conf в redis-server:

nohup redis-server redis.conf &

Чтобы отключить вывод nohup в командной строке:

nohup redis-server redis.conf >/dev/null 2>&1 &

Теперь вы можете запустить redis-server и redis-cli в одном скрипте:

nohup redis-server &
redis-cli

Но одна проблема в том, что redis-server никогда не выключается.

Итак, сохраняем pid:

nohup redis-server &
echo $! > /tmp/redis-server.pid

И убейте его до того, как он запустится (если применимо):

kill $(cat /tmp/redis-server.pid)

Скрипт

Рабочий пример скрипта:

Демо

Повторить:



Эта статья была первоначально опубликована на замечательном сайтеmark.org 2 апреля 2022 г.