2013-06-28 257 views
1

我有一个python脚本,我想在ubuntu ec2实例启动时启动,但即时通讯遇到麻烦。ubuntu ec2 - 在启动时使用参数运行python脚本

脚本运行在一个循环中,并在其准备就绪时保管或退出,所以我不应该在运行后启动或停止脚本。

我已阅读并尝试了很多不同程度的成功方法,并坦诚地质疑最佳方法是什么。我已经尝试了在/etc/init.d中启动python脚本的shell脚本,使其可执行,并执行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中启动脚本,但似乎并没有工作,要么

有谁能够分享他们的发现是在后台运行一个python脚本的最简单方法有关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

我发现,最终的最佳解决方案是使用“新贵“并创建包含在这里使用的新贵系统

http://upstart.ubuntu.com/

以下

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 

更多信息在etc/init一个名为

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等使用,而不会妥善处理stopstart,和其他的init-各种命令的管道,所以......

对于最初的实验,拿/etc/init.d/rc.local的优势脚本(应该链接到默认从/etc/rc2/S99rc.local)。让你无需担心init.d约定,只需在exit 0之前将其添加到/etc/rc.local即可。

此外,~不会被定义,您需要使用完整的路径名 - 此外脚本将以root身份运行。如果需要,我们将解决如何避免这种情况。在其中任何一种情况下,你都需要用更有用的东西来代替“whoeveryouou”。另外需要警告的是,您可能需要在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

有趣,感谢您的回复。我已经创建了一个新的脚本,它包含了放在'/ home/ubuntu/bin/watch_folder_start'中的while循环,并且将这行代码添加到了我的rc.local文件'nohup/home/ubuntu/bin/watch_folder_start&'中。当我手动运行rc.local脚本工作正常,守护进程运行愉快,但它仍然不会在启动时激发,我试图'chmod + rc.local'但似乎没有工作,任何进一步尽管 –

+0

确保你使用'chmod 755/etc/rc.local'将'/ etc/rc.local'设置回正常的perms。从'sudo su - root'里面测试,其中一个运行'/etc/rc2.d/S99rc.local start'(假设你的主机默认运行级别2 - 检查'who -r'确定)。我最终在'/ etc/rc.local'中添加了'touch/tmp/rc.local-ran'来证明它正在执行,因为“运行本地启动脚本(/etc/rc.local)”只显示if VERBOSE已启用(不是默认值)。 'nohup'在这里并不正常,'(cd ... && exec ...)&'在这里对我很好。我的箱子花了1分钟才看到rc.local启动。 –

相关问题