2017-06-20 4 views
0

私はちょうどLinuxに精通しており、ディレクトリの問題のためにstart-stop-daemonにpythonスクリプトを実行させることができません。Linux start-stop-daemonディレクトリのエラーシェル/ pythonスクリプトの呼び出し

〜/ test.txtの

THIS LINE IS A TEST 

〜/ test.py

#!/usr/bin/python 
import time 

with open("test.txt") as f: 
    while True: 
     try: 
      print("Hello World") 
      print(f.readline()) 
      time.sleep(2) 
     except KeyboardInterrupt: 
      f.close() 
      break 

〜/ test.sh

:Linuxのファイル構造では、私はファイルを持っています
#!/bin/bash 

echo "SHELL SCRIPT SUCCESS" > /var/log/test.log 
cd ~/ 
./test.py > /var/log/test.log 

任意のディレクトリからsudo bash ~/test.shを呼び出すと、test.logには、test.pyからのstdoutが期待どおりに取り込まれます。何らかの理由で、test.logが生成されます、次のスタート・ストップ・デーモンのサービスのスクリプトを起動するが、標準出力を移入しません:

/etc/init.d/test

#!/bin/sh 

### BEGIN INIT INFO 
# Provides:  Python test script 
# Required-Start: $remote_fs $syslog 
# Required-Stop: $remote_fs $syslog 
# Default-Start: 2 3 4 5 
# Default-Stop:  0 1 6 
# Short-Description: Prints out daemonized argument 
# Description:  Creates output of argument 
### END INIT INFO 

DAEMON_DIR=/home/alex 
DAEMON=$DAEMON_DIR/test.sh 
DAEMON_NAME=test 

DAEMON_OPTS="hello" 
DAEMON_USER=root 
PYTHON=/usr/bin/python 

PIDFILE=/var/run/$DAEMON_NAME.pid 

. /lib/lsb/init-functions 

do_start() { 
    log_daemon_msg "Starting system $DAEMON_NAME daemon" 
    #start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user $DAEMON_USER --exec $PYTHON --startas $DAEMON 
    start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --chuid $DAEMON_USER --startas /bin/bash /home/alex/test.sh 
    log_end_msg $? 
} 

do_stop() { 
    log_daemon_msg "Stopping system $DAEMON_NAME daemon" 
    start-stop-daemon --stop --pidfile $PIDFILE --retry 10 
    log_end_msg $? 
} 

case "$1" in 

    start|stop) 
    do_${1} 
    ;; 

    restart|reload|force-reload) 
    do_stop 
    do_start 
    ;; 

    status) 
    status_of_proc "$DAEMON_NAME" "$DAEMON" && exit 0 || exit $? 
    ;; 

    *) 
    echo "Usage: /etc/init.d/$DAEMON_NAME {start|stop|restart|status}" 
    exit 1 
    ;; 

esac 
exit 0 

これはstart-stop-daemonで対処できるディレクトリの問題ですか? あるいはIは、例えば/home/alexjg/代わりに~/ため、絶対パスを使用してcdを呼び出してみコールドブートを介して持続することができるスクリプト・サービス(すなわちないcronジョブ)

答えて

0

の他の方法に開いているだろう。以前に壊れていた理由は、あなたの例では、実行しているユーザのホームディレクトリを保持するsudoを使用しているからです。しかし、initからbashスクリプトを呼び出すときには、代わりにtest.pyを含まないrootのホームディレクトリを使用します。

リダイレクトがまだ成功しているため、ファイルが作成されています。しかし、Pythonの起動に失敗したため、出力はありませんでした。

+0

絶対パス 'cd//'を 'cd/home/alex'に変更すると、空の* test.log *になります。さらに、* test.py *を呼び出す前に、 'cd'フォースログの前に、' echo "SHELL SCRIPT SUCCESS">/var/log/test.log'という行は表示されません。 –

+0

@AlexJGあなたは1つの '>'を使用しています。これは、上書きして追加しないことを意味します。 – jacob

+0

'>'と '>> 'の両方のインスタンスを置き換えると、' test.log *!'に 'SHELL SCRIPT SUCCESS'が書き込まれました!しかし、* test.py *内の 'print'ステートメントはまだ表示されていません。 –

関連する問題