Проверять службы, запущенные на сервере, и перезапускать их, если они были остановлены?

Я пытаюсь написать сценарий python, который показывает мне службы, которые работают на моем сервере.

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

То, что я хотел сделать, это автоматизировать эту работу для некоторых служб, если они спустится.

В настоящее время я написал это https://gist.github.com/prodicus/67609dd984309d0a82f9

Я знаю его действительно основных парней. У него много миль 🙂

Теперь, как я могу запустить службы mongodb и apache через этот скрипт? Любые предложения были бы очень полезными парнями.

  • Приостановка подключения невозможна при подключении USB-мыши
  • Способы обновления Ubuntu (debian-based distros) в автономном режиме
  • Не удалось запустить бродячий экземпляр
  • dpkg не может найти ldconfig / start-stop-daemon в переменной PATH
  • «Ошибка файловой системы только для чтения» на Samba share, альтернативный вариант с одинаковыми параметрами (клиент Linux)
  • Как сопоставить кнопку PowerOff как End на XWindows?
  • Ubuntu / GlusterFS: не удалось создать тонко подготовленный том из ранее созданного пула, используя lvcreate
  • Как подключить и отключить соединение openvpn в сценарии bash?
  • 3 Solutions collect form web for “Проверять службы, запущенные на сервере, и перезапускать их, если они были остановлены?”

    Я пытаюсь написать сценарий python, который показывает мне службы, которые работают на моем сервере.

    Не делай этого. Это именно то, для чего нужен диспетчер процессов, например, upstart или systemd . Используя systemd , простой файловый файл для монго может выглядеть примерно так:

     [Unit] Description=High-performance, schema-free document-oriented database After=syslog.target network.target [Service] Type=forking User=mongodb EnvironmentFile=/etc/sysconfig/mongod PIDFile=${PIDFILE-/var/run/mongodb/mongod.pid} ExecStart=/usr/bin/mongod $OPTIONS run PrivateTmp=true LimitNOFILE=64000 TimeoutStartSec=180 [Install] WantedBy=multi-user.target и [Unit] Description=High-performance, schema-free document-oriented database After=syslog.target network.target [Service] Type=forking User=mongodb EnvironmentFile=/etc/sysconfig/mongod PIDFile=${PIDFILE-/var/run/mongodb/mongod.pid} ExecStart=/usr/bin/mongod $OPTIONS run PrivateTmp=true LimitNOFILE=64000 TimeoutStartSec=180 [Install] WantedBy=multi-user.target 

    Если вы хотите, чтобы это было автоматически перезагружено при сбое, вы можете добавить в раздел [Service] :

     Restart=on-failure 

    Если вам не повезло работать с системой без современного диспетчера процессов, вы можете использовать такой инструмент, как супервизор, для достижения такого же эффекта.

    Но на самом деле, если ваше приложение продолжает сбой, вам гораздо лучше попытаться найти источник проблемы. Mongodb регистрирует информацию в любом месте logpath в /etc/mongod.conf ( /var/log/mongodb/mongodb.log в моей системе), и это, вероятно, первое место для поиска проблем.

    Другие приложения предоставляют аналогичную диагностическую информацию, которая может помочь найти основную причину сбоев.

    Быстрый и грязный способ:

    Вы можете поместить скрипт в cron для запуска каждые X минут и перезапустить mongodb, если он не запущен.

    Главное в этом простом скрипте ниже, он полагается на код ответа grep, чтобы определить, следует ли перезапустить его или нет. Однако вам нужен этот второй grep, потому что первый grep всегда будет возвращаться успешно, из-за того, что команда grep сама появляется в списке процессов. Поэтому, если вы скажете «Grep для THIS STRING» в выводе ps, grep first всегда найдет это, потому что он всегда найдет процесс команды «Grep для ЭТОЙ СТРОКИ».

    Конечно, есть лучшие и более красивые способы сделать это, но логика ниже работает. В конце концов, это может быть уродливо, но это работает. Я позаимствовал из простого сценария, который мне приходилось писать, чтобы гарантировать, что очень медленная синхронизация с другого континента будет продолжать работать, даже если сеть была крайне бедной и регулярно удаляла соединение.

     #!/bin/bash # DATE var only included in case you want some rudimentary logging on when mongo drops/restarts. You will have to add that yourself. DATE=`date +%m-%d-%H:%M:%S` ps -ef | grep 'unique first part of unique string that you see from ps which indicates mongo is running' | grep 'second part of unique string that you see from ps when mongo is running'; if [ $? == "1" ]; then command to restart mongodb; can also include other commands to make sure it runs correctly like removing stale locks etc; fi 

    Выполняется ли он как root? В этом случае вы можете service xxxx start в своем скрипте, где xxxxmongodb или apache .

    Linux и Unix - лучшая ОС в мире.