Все процессы, которые мне нужно запустить, - это все долго выполняющиеся процессы, которые не завершаются (обычно).
Я бы сделал их системными службами, используя систему инициализации вашей ОС.Позвольте системе, разработанной для управления долгосрочными процессами, управлять вашими долгосрочными процессами.Зачем тратить энергию на переосмысление всех функций, которые уже есть в хорошей системе инициализации, таких как автоматический перезапуск, управление журналами и межсервисные зависимости?
Давайте предположим, что ваша система инициализации systemd , котораяэто то, что используют современные дистрибутивы Red Hat и Debian.
Я не хочу просто запускать их в фоновом режиме, так как мне нужно видеть их вывод.
systemd автоматически захватываетstdout и stderr и сохраняет их в своем журнале.Такие команды, как systemctl status <service>
и journalctl
, предоставляют множество способов просмотра и поиска данных журнала.Вы можете фильтровать по уровню серьезности, или по времени, или по многим другим полям метаданных.Вы можете посмотреть выходные данные для одной службы или комбинированные выходные данные для нескольких служб.
Если какой-либо из процессов завершается, я хочу, чтобы остальные также автоматически уничтожались.
systemd позволяет вам выразить это с помощью BindsTo=
, Requires=
или других подобных опций.Подробнее см. Справочную страницу systemd.unit .
Если я использую Ctrl + C или другой сигнал в основной команде, используемой для их запуска, я хочу уничтожить все процессы.
Вы можете остановить услуги с помощью systemctl stop <service>
.Он остановит именованный сервис и его зависимые элементы.
Для выборки всего, что systemd может сделать для вас, просмотрите его руководство: