В этой статье рассказывается, как запустить команду в фоновом режиме с помощью 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 г.