web-dev-qa-db-ja.com

Linux起動時にpythonスクリプトを実行する方法

Linux Ubuntu 14.04〜/app /serve.pyにスクリプトがあります

このフォルダで実行する必要があります。シェルで私はするかもしれません

> cd ~/app && python serve.py

そしてそれはサーバーを実行します

バックグラウンドで起動するサーバーで実行する必要があります。このコマンドを追加しようとしましたcd ~/app && python serve.py ~ etc/rc.local(およびetc/init.d/rc.local)にありますが、起動しません。

何が悪いのですか?

5
WHITECOLOR

/etc/rc.localにcd ~/app && python serve.pyを追加する代わりに、パス全体を入力してみてください。どういうわけか、initプロセスが〜がホームディレクトリであることを認識していることを期待していますが、initはrootとして開始されます。 initはrootで始まるため、/でホームディレクトリではなくアプリディレクトリを探します。ホームディレクトリへのパスを使用して、〜を取り除きます。

/home/whitecolor/app/serve.py/etc/rc.localに追加してみてください。 (パスウェイディレクトリを見つけるにはpwd。)スクリプトの先頭に#!/usr/bin/pythonを追加して、serve.pyスクリプトの前にあるpythonを削除します。 (通常の場所にインストールされていない場合に備えて、パスを見つけるにはwhich pythonを入力します)

編集:あなたは「バックグラウンドで実行する」と言いました、そして私はそれを逃しました。バックグラウンドでコマンドを実行するには、コマンドの後に&を追加します。したがって、上記のコマンドをバックグラウンドで実行するには、次のようにします。/home/whitecolor/app/serve.py & Initは通常、ジョブを開始してバックグラウンドで実行するためにバックグラウンドシンボルを必要としません。

DrDRの優れた提案は、デフォルトでバックグラウンドで実行されるため、cron起動時のコマンドの後に同じ&処理を必要としないでしょう。

5
ScotT

私はこれを試す必要がなかったが、@ rebootで始まる行と同様の行を以下に追加することにより、cronを介してシステムの起動時にスクリプトを実行できるようです。

#m  h  dom  mon  dow  command
1   *  *    *    *    someHourlyCommand
@reboot               python /home/<username>/app/serve.py

ディレクトリへのcdを排除するために、コマンドを少し変更したことに注意してください。あなたの状況は異なるかもしれないので、あなたのために働くことをしてください。

4
DrDR