2015-08-25 2 views
0

Я пытаюсь запустить два сценария оболочки в фоновом режиме через загружаемую книгу. Playbook работает успешно и показывает, что все задачи успешно выполнялись.Невозможно вызвать сценарий оболочки из незанятой пьесы

Но эти два сценария оболочки не работают. Я проверил это с:

ps -ef | grep sh 

Этих две сценариев оболочек необходимы для запуска службы шалфея, и я пытаюсь автоматизировать конфигурацию сервера возрастных с с использованием анзиблем. Вот как сборник пьес выглядит следующим образом:

--- 
- hosts: localhost 
    remote_user: root 

    tasks: 
    - name : update system 
    shell : apt-get update 

    - name : install dependencies 
    shell : apt-get install -y m4 build-essential gcc gfortran libssl-dev 

    - name : install python-software-properties 
    shell : apt-get install python-software-properties 

    - name : add sage ppa repo 
    shell : apt-add-repository ppa:aims/sagemath 

    - name : update system 
    shell : apt-get update 

    - name : install dvipng 
    shell : apt-get install dvipng 

    - name : install sage binary 
    shell : apt-get install sagemath-upstream-binary 

    - name : run create sage script 
    shell : . ./create_sagenb & 

    - name : run start sage script 
    shell : . ./start_sage & 

Это как create_sagenb выглядит следующим образом:

#!/bin/bash 
# Creating Sage notebook 
screen -S "Sage_Server" sage -c 'notebook(interface="",directory="/root/.sage/sage_notebook.sagenb",port=80,accounts=true)' 

Это как start_sage выглядит:

#!/bin/bash 
# Creating Sage notebook 
address=$(hostname --ip-address) 
screen -S "Sage_Server" sage -c "notebook(interface=" "'$address'" ",port=80,accounts=true)" 

ответ

0

Это, как я успешно вызвать сеансы экрана в анзибле:

- name: Invoke script 
    command: /usr/bin/screen -d -m sudo -u myuser /usr/local/bin/myuser.sh -i -y 

Это начинает сеанс экрана в отдельном режиме (-d и -m комбинированный), которые я затем использовать sudo для перехода к определенному пользователю для запуска моего сценария.

+0

Спасибо человеку. Начальный экран в отдельном режиме работал для меня – apurv

1

При выходе из системы - или в этом случае Ansible завершает свои задачи и закрывает ssh-соединение, выходной сигнал будет автоматически отправлен всем дочерним процессам. Поскольку экран не был отсоединен, я предполагаю, что он также завершится при выходе из системы. Это похоже на то, что вы печатаете «выход», а не просто отсоединяете.

Вы должны быть в состоянии предотвратить это с nohup, например:

- name : run create sage script 
    shell : nohup ./create_sagenb & 

nohup и screen немного лишними здесь и, возможно, вы можете удалить screen, если вы не хотите, чтобы повторно прикрепить к сессии Sage_Server позже.

Но я думаю, что вам нужно задуматься о создании сценария инициализации, например, с помощью start-stop-daemon. Посмотрите на это: https://www.project-insanity.org/blog/2012/09/27/install-sage-5-3-on-debian-squeeze-initscript/

+0

Я попытался запустить его в фоновом режиме, nohup и отключить. Ничто не работает. Этот скрипт не заканчивается. Он держит терминал сам по себе, и, следовательно, никакая команда не работает – apurv

+0

@apurv, используйте 'supervisor' или что-то, чтобы он не работал. используя 'nohup' и другие вещи, такие как' screen', являются взломанными. – tedder42

Смежные вопросы