簡體   English   中英

ubuntu ec2-在啟動時使用參數運行python腳本

[英]ubuntu ec2 - run python script at startup with arguments

我有一個python腳本,我想在ubuntu ec2實例上啟動時啟動,但是我遇到了麻煩。

該腳本在循環中運行,當其准備就緒時會小心或退出,因此我在運行后無需啟動或停止它。

我已經閱讀並嘗試了許多方法,這些方法都取得了不同程度的成功,並且老實說,我對最佳方法感到困惑。 我試過將可啟動python腳本的shell腳本放在/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實例啟動時在后台運行帶參數的最簡單方法的最簡單方法。

更新:----------------------

此后,我已將此代碼移至名為/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但沒有任何改變,

您的/etc/init.d/script_name缺少使用update-rc.d等的管道,並且無法正確處理stopstart和其他init-variety命令,因此...

對於初始實驗,請利用/etc/init.d/rc.local腳本(默認情況下應從/etc/rc2/S99rc.local鏈接至該腳本)。 這樣您就不必擔心init.d約定,只需在exit 0末尾的/etc/rc.local exit 0添加內容即可。

另外,將不會定義~ ,您將需要使用完整的路徑名-而且腳本將以root身份運行。 如果有需要,我們將解決如何避免這種情況。 無論采用哪種方式,您都需要用更有用的內容替換“ whoeveryouare”。 還請注意,您可能需要在python命令前加上su命令和一些參數,以使進程以您可能需要的用戶ID運行。

您可以嘗試(在/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

我發現最后最好的解決方案是使用“ upstart”並在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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM