web-dev-qa-db-ja.com

ENOEXECで終了する監視プログラム

Javaスーパーバイザでプロセスを実行しようとしていますが、次のようになります。

couldn't exec /var/application/start_tester: ENOEXEC

Start_testerの内容は次のとおりです。

Java -Duser.dir=/var/application/ -cp /var/application/application.jar:/var/application/toepoke.jar com.application.Application

コンソールからスクリプトを実行すると、アプリは期待どおりに実行されます。これが私のスーパーバイザー設定です

[program:application_tester]
directory=/var/application
command=/var/application/start_tester         ; the program (relative uses PATH, can take args)
log_stdout=true             ; if true, log program stdout (default true)
log_stderr=true             ; if true, log program stderr (def false)
logfile=/var/log/application_tester.log

コンソールからスクリプトを実行すると、出力は次のようになります。

[root@monitor application]# ./start_tester 
20131009 203657: application starting up.
20131009 203657 (33): version 2.2.3
22
ipengineer

ファイルは実行可能である必要があります。だからどちらか:

  1. 実行可能ビットを設定するには、chmod +xする必要があります。
  2. ファイルの先頭にシバンを置きます。これがないのがENOEXECの原因です。

または

  1. 設定ファイルをcommand=sh /var/application/start_testerのようなものに変更します。
48
Joe

ほとんどの場合、シバンは通常欠落しています。

  - #!/usr/bin/env bash
  - #!/bin/bash
  - #!/bin/sh
  - #!/bin/sh -

Shebangをgunicorn_startファイルに追加したら(Djangoの場合)、スーパーバイザーを再起動します

Sudo systemctl enable supervisor 
Sudo systemctl restart supervisor
5
Vidor Vistrom