Задать вопрос

Как узнать запущен ли процесс?

Для отслеживания изменения файлов на диске использую:
https://github.com/gregghz/Watcher

Когда его запускаю, то все работает, но со временем, он перестает работать.
Перезапускаю его и он опять работает
Как проверить, что он работает в текущий момент?

1) Проверяю pid, он существует:
root@Web:~$ll /root/.watcher/watcher.pid
-rw-rw-rw- 1 root root 5 июн  3 08:38 /root/.watcher/watcher.pid


2) Проверяю процессы:
root@Web:~$ps ax | grep watcher
1980 ?        Sl     0:01 python /usr/bin/watcher.py start
3198 pts/0    S+     0:00 grep watcher


Запускаю его через rc-local.service, для этого создал файл
/etc/rc.local#!/bin/sh -e
watcher.py stop
watcher.py start
exit 0


PS. "watcher.py stop" прописал, так как иногда выдает ошибку, что он уже запущен. Наверное смотрит, что PID создан.

Создал службу, прописал в файле
/etc/systemd/system/rc-local.service
[Unit]
 Description=/etc/rc.local Compatibility
 ConditionPathExists=/etc/rc.local
 
[Service]
 Type=forking
 ExecStart=/etc/rc.local start
 TimeoutSec=0
 StandardOutput=tty
 RemainAfterExit=yes
 SysVStartPriority=99
 
[Install]
WantedBy=multi-user.target


Дал ему права и поставил в запуск:
chmod +x /etc/rc.local
systemctl enable rc-local
systemctl start rc-local


PS. Думаю поставить его на ежедневную перезагрузку в cron. Но пока интересно, как отследить его "падение".
  • Вопрос задан
  • 1749 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@pfg21
ex-турист
зачем крон и прочие костыли, если есть системд ??
напиши соттвествующий юнит и системд сам будет и запускать процесс и перезапускать в случае падения.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
alternativshik
@alternativshik
через supervisord запускайте.
Ответ написан
Radjah
@Radjah
А использовать incron без питоновой обвязки не вариант?
Ответ написан
@SaddledSharp
Кодер. Увлекаюсь информационной безопасностью.
Можно воспользоваться универсальным кроссплатформенным решением - psutil (pip install psutil).
import psutil
for proc in psutil.process_iter():
    name = proc.name()
    print(name)
    if name == "program.exe":
        pass
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы