#bash #ansible
#bash #ansible
Вопрос:
Я создаю простой симулятор трафика: клиент, который запускает веб-сервер каждые 10 секунд. Клиент (Debian) и веб-сервер настроены с использованием Ansible. Фоновый цикл закрывается, когда соединение Ansible-SSH закрывается.
Сначала я запустил команду:
$ while true; do curl python_webserver:8000; sleep10; done </dev/null >/dev/null 2>amp;1 amp;;
$ disown
И он отлично работает с Bash, но если я помещу его в скрипт, он завершится в конце ssh-соединения.
Я пробую некоторые другие решения, например, использование:
$ nohup [command]
$ nohup /bin/bash -c '[command]
или с помощью «деамонизации», но ничего не сработало. Ничего, что я нашел в Интернете, не работает; возможно, я упускаю что-то важное. (Написание pid важно, но не фундаментально)
Я здесь сценарий, может быть, есть большая ошибка новичка.
#!/bin/bash
PORT=8000
while true; do
curl python_webserver:$PORT
sleep 10
done >/dev/null 2>amp;1 amp;
ANSIBLE_CLIENT_PID=$!
echo $ANSIBLE_CLIENT_PID >> /tmp/ANSIBLE_PID.txt
disown
Комментарии:
1. @oguzismail Скрипт запускается Ansible-playbook, поэтому я не могу запустить его с помощью setsid().
2. Итак, вы пробовали
nohup sh -c 'while true; do curl python_webserver:'"$PORT"'; sleep 10; done >/dev/null 2>amp;1' amp;
?3. Ansible может выполнить скрипт или команду на удаленном хосте, используя SSH-соединение, поэтому я могу выполнить setsid, если он установлен на удаленном хосте. [ docs.ansible.com/ansible/2.4/script_module.html ] . Я попытался запустить его как команду или внутри скрипта, но фоновый процесс по-прежнему завершается при завершении ssh-соединения.
4. @KamilCuk Это работает! Возможно, я допустил какую-то ошибку с кавычками! Большое вам огромное спасибо
Ответ №1:
Ответы
nohup sh -c 'while true; do curl python_webserver:'"$PORT"'; sleep 10; done >/dev/null 2>amp;1' amp;
Возможно, я допустил ошибку с кавычками.
Спасибо всем за помощь
(особенно Камил Кук за решение)
Комментарии:
1. Обязательно перенаправьте
nohup
вывод на null, иначе вы получите этиnohup.out
файлы. Итакnohup sh -c .... >/dev/null 2>amp;1