Подтвердить что ты не робот

Демонтаж исполняемого файла в недоступном

Я пытаюсь создать задачу в ansible, которая выполняет команду оболочки для запуска исполняемого файла в режиме демона с помощью &. Что-то вроде следующего

-name: Start daemon
  shell: myexeprogram arg1 arg2 &

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

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

4b9b3361

Ответ 1

Запуск программы с '&' не делает программу демонами, она просто работает в фоновом режиме. Чтобы создать "настоящий демон", ваша программа должна выполнить шаги, описанные здесь.

Если ваша программа написана на C, вы можете вызвать функцию daemon(), которая сделает это за вас. Тогда вы можете запустить свою программу даже без '&' в конце, и он будет работать как демон.

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

- name: Start daemon
  shell: daemon -- myexeprogram arg1 arg2

Ответ 2

Когда вы (или Ansible) выходите из системы, выходной сигнал по-прежнему будет отправлен на текущий процесс, хотя он работает в фоновом режиме.

Вы можете использовать nohup, чтобы обойти это.

- name: Start daemon
  shell: nohup myexeprogram arg1 arg2 &

http://en.wikipedia.org/wiki/Nohup

Ответ 3

Из краткого описания того, что вы хотите достичь, похоже, вам было бы лучше настроить ваш исполняемый файл как услугу (используя Upstart или аналогичную), а затем запустить/остановить ее по мере необходимости на основе других условий которые требуют, чтобы он работал (или не работал).

Попытка запускать это как процесс в противном случае будет повлечь за собой захват PID или аналогичного, чтобы вы могли попробовать и закрыть демон, который вы запустили, когда вам нужно, с той же сложностью, что и установка конфигурации init файл будет принимать и без тонкостей, которые такие системы, как Upstart, дают вам такие элементы управления, как start/stop.

Ответ 4

Я нашел лучший способ, особенно потому, что я хотел, чтобы вывод был зарегистрирован, должен был использовать пакет daemonize. Если вы находитесь в CentOS/Redhat, как показано ниже. Вероятно, для него есть и apt-пакет.

- name: yum install daemonize
  yum:
    name: daemonize
    state: latest

- name: run in background, log errors and standout to file
  shell:  daemonize -e /var/log/myprocess.log -o /var/log/myprocess.log  /opt/myscripts/myprocess.sh