Как запустить фоновый цикл из bash-скрипта из Ansible-playbook

#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