2013-06-28 2 views
1

У меня есть скрипт python, который я бы хотел запустить при запуске на экземпляре ubuntu ec2, но я столкнулся с проблемами.ubuntu ec2 - запустить скрипт python при запуске с аргументами

Скрипт работает в цикле и заботится о себе или уходит, когда он готов, поэтому мне не нужно запускать или останавливать его после его запуска.

Я читал и пробовал много подходов с разной степенью успеха и честно смущен тем, что лучше всего подходит. Я попытался поместить сценарий оболочки, который запускает скрипт python в /etc/init.d, делая его исполняемым и делая update-rc.d, чтобы попытаться запустить его, но его не удалось на каждом этапе.

вот содержимое Айв сценария пытавшиеся:

#!/bin/bash 

cd ~/Dropbox/Render\ Farm\ 1/appleseed/bin 
while : 
do 
    python ./watchfolder18.py -t ./appleseed.cli -u ec2 ../../data/ 
done 

я тогда сделал

sudo chmod +x /etc/init.d/script_name 
sudo sudo update-rc.d /etc/init.d/script_name defaults 

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

Я также попытался добавить строку в rc.local, чтобы запустить сценарий, но это не похоже на работу либо

Может кто-нибудь рассказать, что они нашли это самый простой способ для запуска питона скрипт в фоновом режиме с аргументами при запуске экземпляра ec2.

UPDATE: ----------------------

Я с тех пор переехал этот код в файл под названием /home/ubuntu/bin/watch_folder_start

#!/bin/bash 

cd /home/ubuntu/Dropbox/Render\ Farm\ 1/appleseed/bin 
while : 
do 
    python ./watchfolder18.py -t ./appleseed.cli -u ec2 ../../data/ 
done 

и изменил мой rc.local файл следующим образом:

nohup /home/ubuntu/bin/watch_folder_start & 

exit 0 

который работает, когда я вручную запустить rc.local но обыкновение пожара при запуске, я сделал chmod +x rc.local, но это ничего не меняет,

+0

только догадка: делает ваш скрипт для печати на терминал? В этом случае он умрет. Перенаправить вывод на лог-файлы или что-то подобное. – Matthias

+0

ознакомьтесь с этим уроком (http://aameer.github.io/cloud-computing-101/) – Aameer

ответ

0

Я обнаружил, что лучшим решением в конце концов, должен был использовать «выскочку 'и создать файл в etc/init под названием myfile.conf, который содержал следующую

description "watch folder service" 
author  "Jonathan Topf" 

start on startup 

stop on shutdown 

# Automatically Respawn: 
respawn 
respawn limit 99 5 

script 
    HOST=`hostname` 
    chdir /home/ubuntu/Dropbox/Render\ Farm\ 1/appleseed/bin 
    exec /usr/bin/python ./watchfolder.py -t ./appleseed.cli -u $HOST ../../data/ >> /home/ubuntu/bin/ec2_server.log 2>&1 
    echo "watch_folder started" 
end script 

Подробнее об использовании системы выскочка здесь

http://upstart.ubuntu.com/

https://help.ubuntu.com/community/UbuntuBootupHowto

http://blog.joshsoftware.com/2012/02/14/upstart-scripts-in-ubuntu/

0

Ваш /etc/init.d/script_name отсутствует водопровод, что update-rc.d и так далее использования, и не будет правильно обрабатывать stop, start и другие команды INIT-разнообразие, так что ...

Для первоначального эксперимента, воспользоваться из /etc/init.d/rc.local скрипт (к которому по умолчанию должны быть привязаны /etc/rc2/S99rc.local). Вам не нужно беспокоиться о соглашениях init.d и просто добавлять вещи к /etc/rc.local перед exit 0 в конце.

Кроме того, что ~ не будет определен, вам нужно будет использовать полное имя пути - и, кроме того, скрипт будет работать от имени root. Мы рассмотрим, как избежать этого, если хотите, немного. В любом из них вам нужно заменить «whoeveryouare» чем-то более полезным. Также следует предупредить, что вам может потребоваться префикс команды python командой su и некоторые аргументы для запуска процесса с идентификатором пользователя, который вам может понадобиться.

Вы можете попробовать (в /etc/rc.local):

(if cd '/home/whoeveryouare/Dropbox/Render Farm 1/appleseed/bin' ; then 
     while : ; do 
      # This loop should respawn watchfolder18.py if it dies, but 
      # ideally one should fix watchfolder18.py and remove this loop. 
      python ./watchfolder18.py -t ./appleseed.cli -u ec2 ../../data/ 
     done 
    else 
     echo warning: could not find watchfolder 1>&2 
    fi 
) & 

Вы также можете поместить все, что в сценарии и просто вызвать его из /etc/rc.local.

Первый проход примерно то, что у вас было, но если предположить, что watchfolder18.py устроят избежать смерти, мы можем сократить его до:

(cd '/home/whoeveryouare/Dropbox/Render Farm 1/appleseed/bin' \ 
    && exec python ./watchfolder18.py -t ./appleseed.cli -u ec2 ../../data/) & 

Это не все, что красиво, но это должно позволить вы получите свой демон, чтобы вы могли его отладить и т. д., а затем вернитесь к созданию правильного /etc/init.d или /etc/init скрипта позже. Нечто подобное могло бы работать в /etc/init/watchfolder.conf, но я еще не достаточно поверхностным утверждать, что это ничто иное, чем грубый удар на него:

# watchfolder - spawner for watchfolder18.py 
description  "watchfolder program" 

start on runlevel [2345] 
stop on runlevel [!2345] 

script 
    if cd '/home/whoeveryouare/Dropbox/Render Farm 1/appleseed/bin' ; then 
    exec python ./watchfolder18.py -t ./appleseed.cli -u ec2 ../../data/0 
    fi 
end script 
+0

интересно, спасибо за ответ. Я создал новый скрипт, содержащий цикл while, который помещен в '/ home/ubuntu/bin/watch_folder_start' и добавил эту строку в мой файл rc.local' nohup/home/ubuntu/bin/watch_folder_start & '. Когда я запускаю rc.local вручную, скрипт работает так, как ожидалось, и демон запускается с радостью, но он все еще не срабатывает при запуске, я пытался «chmod + rc.local», но это, похоже, не работало, а дальше –

+0

Убедитесь, что вы установите '/ etc/rc.local' обратно в обычные perms с помощью' chmod 755/etc/rc.local'. Тест изнутри 'sudo su - root', в котором запускается' /etc/rc2.d/S99rc.local start' (при условии, что ваш хост по умолчанию имеет уровень запуска 2 - проверьте 'who -r', чтобы убедиться). Я закончил добавление 'touch/tmp/rc.local-ran' в'/etc/rc.local', чтобы доказать, что он выполняется, поскольку «Запуск локальных сценариев загрузки (/etc/rc.local)» появляется только в том случае, если VERBOSE включен (не по умолчанию). 'nohup' здесь ненормален, а' (cd ... && exec ...) & 'отлично работает для меня здесь. Мне потребовалось ~ 1 мин, чтобы увидеть запуск rc.local. –