Я пишу ansible playbook, который пойдет и убьет PID.
Я нашел хороший ответ, который имел отношение ко мне: https://stackoverflow.com/a/46541018/8863970
Однако первый шаг, который в моем случае Get running processes
, у меня есть два следующих процесса:
# when i do: ps -ef | grep appp.py
ubuntu 17765 1 2 12:14 pts/0 00:00:04 python appp.py
ubuntu 17784 17765 4 12:15 pts/0 00:00:05 /home/ubuntu/venvs/myvnv/bin/python /home/ubuntu/deploy/appp.py
ubuntu 17844 14784 0 12:17 pts/0 00:00:00 grep --color=auto appp.py
Он убивает 17765
, а затем терпит неудачу:
failed: [10.10.1.1] (item=17784) => {"ansible_loop_var": "item", "changed": true, "cmd": "kill 17784", "delta": "0:00:00.002196", "end": "2020-04-26 12:23:22.833284", "item": "17784", "msg": "non-zero return code", "rc": 1, "start": "2020-04-26 12:23:22.831088", "stderr": "/bin/sh: 1: kill: No such process", "stderr_lines": ["/bin/sh: 1: kill: No such process"], "stdout": "", "stdout_lines": []}
Это значит... он не может найти 17784
, чтобы убить.
Вопрос: как мне получить только родительский PID (17784) с помощью ps grep, а затем передать его, чтобы убить?
ps
иgrep
. Или напишите модуль systemd для запуска вашего приложения Python, чтобы вы могли просто использоватьsystemctl stop ...
, чтобы остановить его. - person larsks   schedule 26.04.2020pkill
, а неgrep + kill
. Сначала вы можете проверить свое выражение с помощьюpgrep
. Между тем, лучшее решение — следовать комментариям @larsks выше. - person Zeitounator   schedule 26.04.2020