[英]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
等的管道,並且無法正確處理stop
, start
和其他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
有關在這里使用新貴系統的更多信息
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.