2017-06-27 5 views
0

のためのサービスを作成します。私はこのようなループを含むPythonスクリプトを持っているPythonスクリプト

while True: 
    if p.poll(waitTime): 
     if j.process() == journal.APPEND: 
      for entry in j: 
       process_data(entry)) 

は現在、私のサービスは、次のようになります。

[Unit] 
Description=Journald shipper 
Requires=systemd-journald.service 
After=systemd-journald.service 

[Service] 
Type=forking 
ExecStart=/usr/bin/myScript.py 

[Install] 
WantedBy=multi-user.target 

私が現在持っている問題があります«start»コマンドはタイムアウトを返します。スクリプトが終了しませんが、サービスが開始されることはありませんので、:(

ので それは論理的だ、私は私が間違ったことをやっていると仮定します。私はそれが最後だか私が持っていないのを待たずにスクリプトを実行できるように.serviceファイルを変更することがありますか?

を私の«無限»ループを変更し、どのように私はこの?

+1

'p.poll(waitTime):'が間違っている場合。スクリプトが終了したかどうかを確認する予定ですが、スクリプトが失敗してゼロの戻りコードが失敗した場合は失敗します。代わりに 'p.poll(waitTime)がNone:でない場合'を実行してください。 –

答えて

0

私はと個人的に慣れていないですので、私はこれだけを言う。あなたのプラットフォームに関するいくつかの追加情報が適切にこれに答えるために必要があるかもしれないと思うことができますあなたがそこに持っているサービスのフォーマット。

しかし、純粋なPythonの方法でこれを行うには、daemonocleパッケージを使用してサービスを作成することができます。あなたのスクリプトを実行し、/にそれをインストールするには、このテンプレートを変更する必要があり、この方法で https://gist.github.com/shawnrice/11076762
:あなたはこのようなデーモン骨格を使用することができます https://pypi.python.org/pypi/daemonocle代わり

、と私は正常にこのタスクを実行する方法、最初にdeamonスクリプトを実行した後、標準の "サービス"を使用してサービスを制御できるはずです。

+0

私が起動しようとしているスクリプトは次のとおりです:https://github.com/chindit/journald-shipper私はそれをArchLinux上で実行しています – chindit

関連する問題