2016-06-01 27 views
1

私はec2のボックスでubuntoを実行しています。私は、マシンが起動し、特定のディレクトリにするたびに、次のコマンドを実行したいと思います:私は読むことを linux - rc.localを使ってディレクトリを変更し、起動時にコマンドを実行する方法

sudo nano /etc/rc.local 

を実行して、ファイルを編集した

celery -A someapp.tasks --concurrency=1 --loglevel=info worker > output.log 2> errors.log 

#!/bin/sh -e 
# 
# rc.local 
# 
# This script is executed at the end of each multiuser runlevel. 
# Make sure that the script will "exit 0" on success or any other 
# value on error. 
# 
# In order to enable or disable this script just change the execution 
# bits. 
# 
# By default this script does nothing. 
(
    cd /home/ubuntu/somefolder/ 
    sh -e -c 'celery -A someapp.tasks worker -Ofair --loglevel=info > output.log > errors.log' 
) 
exit 0 

しかし、サーバーが起動すると、コマンドは実行されません。/home/ubunto/somefolderに直接cdしてceleryコマンドを実行すると、操作は期待通りに開始されます。マシンを起動するたびにこのコマンドを実行するにはどうすればよいですか?

+0

あなたはrootユーザーとして「cd/home/ubunto/somefolderに直接cdしてセロリコマンドを実行しましたか? –

+0

つまり$ sudoセロリ...?私はそれを試していませんが、これが許可の意味を理解しています。 – user714852

+0

、さらには 'sudo su -'、次にcd ...そしてセロリー...許可問題が既にディレクトリに影響する場合は –

答えて

2

あなたはディレクトリを作業rc.local年代変化しないように、サブシェルを使用して、このようにそれを試してみてください:あなたは、単に使用することができます

cd /home/ubuntu/somefolder && celery -A someapp.tasks --concurrency=1 --loglevel=info worker >output.log 2> errors.log 
+0

ありがとうございます。私は囲み括弧を使おうとしましたが、サイコロはありませんでした。 rc.localの新しい状態を反映するために私の質問を更新します – user714852

+0

ああ、私は参照してください。あなたは私のためにこれを試すことができますか? 'cd/home/ubuntu/somefolder'それから' sh -e -c 'セロリ - A someapp.tasks - concurrency = 1 --loglevel = infoワーカー> output.log 2> errors.log'' – Will

+0

私は編集しました提案されたファイル(問題のコードも更新されましたが)はまだありません。テストするために私は編集を加えました。マシンを停止しました。その後、もう一度起動しました。チェックの際、セロリコマンドは実行されていませんでした:/ – user714852

0

を、私はこの1つをしようとするだろう次

sudo vi /etc/crontab 

最後にこれを追加します。

@reboot cd /home/ubuntu/somefolder/ && sh -e -c 'celery -A someapp.tasks worker -Ofair --loglevel=info > output.log > errors.log' 

乾杯。

1

(
    cd /home/ubuntu/somefolder 
    celery -A someapp.tasks --concurrency=1 --loglevel=info worker >output.log 2> errors.log 
) 
exit 0 
関連する問題