2017-11-02 18 views
0

私はこの質問がbajillion回尋ねられたことを知っていますが、私はこれを理解できません。私は話題にできるすべてのページを読んだことがありますが、何も試したことはありません。init.dスクリプトはリブートでは起動しませんが、コマンドラインから動作します

基本的には、/etc/init.dにはコマンドラインからうまく動作するスクリプトがありますが、起動時には動作しません。私はそれがまったく実行されていないか、何らかのエラーが発生しているかどうかはわかりません。

Robinsonは自家製のSinatraアプリケーションです。

#!/bin/sh 

### BEGIN INIT INFO 
# Provides:   robinson 
# Required-Start: $local_fs $remote_fs $network $syslog $named 
# Required-Stop:  $local_fs $remote_fs $network $syslog $named 
# Default-Start:  2 3 4 5 
# Default-Stop:  S 0 1 6 
# Short-Description: robinson initscript 
# Description:  robinson 
### END INIT INFO 

# Do NOT "set -e" 

DAEMON=/home/terry/projects/robinson/dev/trunk/installation/control.rb 
SCRIPT_NAME=/etc/init.d/robinson 
INSTALLATION_PATH="/home/terry/projects/robinson/dev/trunk/installation" 


# Exit if the package is not installed 
[ -x "$DAEMON" ] || exit 0 

case "$1" in 
    start) 
    $DAEMON $INSTALLATION_PATH start 
    ;; 
    stop) 
    $DAEMON $INSTALLATION_PATH stop 
    ;; 
    restart) 
    $DAEMON $INSTALLATION_PATH restart 
    ;; 
    *) 
    echo "Usage: $SCRIPT_NAME {start|stop|restart}" >&2 
    exit 3 
    ;; 
esac 


: 

だから、/etc/init.dの中にそのスクリプトの:

まず、ここではinit.dディレクトリにありますスクリプトです。そのアクセス許可は次のように設定されています。

init.d # ls -lh robinson 
-rwxr-xr-x 1 root root 839 Nov 2 03:45 robinson 

スクリプトでupdate-rc.dを実行しました。サービス作品... ...

init.d # sudo update-rc.d robinson remove 
init.d # sudo update-rc.d robinson defaults 

を、私は、コマンドラインでサービスを開始した場合

init.d # sudo service robinson start 

を:実際には、私もそれを再度追加し、スクリプトを削除するには、それを実行してみましたちょうど良い。

シナトラアプリは非常に簡単です。今、私はSinatraを動かそうとしています。

# set path to app that will be used to configure unicorn 
@dir = '/home/terry/projects/robinson/dev/trunk/installation/' 

worker_processes 3 
working_directory @dir 
timeout 30 

# configure for Robinson 
robinson_data = '/srv/terry/robinson' 

# Specify path to socket unicorn listens to, 
# we will use this in our nginx.conf later 
listen "#{robinson_data}/sockets/unicorn.sock", :backlog => 64 

# Set process id path 
pid "#{robinson_data}/pids/unicorn.pid" 

# Set log file paths 
stderr_path "#{robinson_data}/logs/unicorn.stderr.log" 
stdout_path "#{robinson_data}/logs/unicorn.stdout.log" 

それは注目に値するかもしれない:

require "rubygems" 
require "sinatra" 
require "sinatra/base" 

# Robinson 
class Robinson < Sinatra::Base 
    get '/*' do 
     return 'hello world' 
    end 
end 

# run request routine 
run Robinson 

これは

# unicorn socket 
upstream robinson_unicorn_server { 
    server unix:/srv/terry/robinson/sockets/unicorn.sock 
     fail_timeout=0; 
} 

unicorn.rbは次のようになりロビンソンのためnginxの設定ファイルである:ここでconfig.ruの全体ですサーバーを再起動すると、unicorn.stderr.logにエントリが追加されません。

Operating system: Ubuntu Linux 16.04.1 
Kernel and CPU: Linux 4.4.0-98-generic on x86_64 
nginx version: nginx/1.10.3 (Ubuntu) 

がわからない与えるために、他のどのような情報:

は、ここではいくつかのシステム情報です。追加する必要があるものがあれば教えてください。

何か助けていただければ幸いです。

答えて

0

私はコマンドラインから実行すると、あなたがsudoで実行しているときに、スクリプトを実行している 'ユーザー'の事実と関係があった。働いていた私が使用

ソリューションは、変数を設定し、それぞれの方法

ため

# set user to a user with permission to run the scripts (root is overkill) 
user=root 
case "$1" in 
    start) 
     sudo -u ${user} /home/script.sh ${1} >> /home/scriptlog.log 
    ;; 

と同じことを次のようにスクリプトを実行することで、あなたの状況

+0

I'LLのために役立つかもしれませんそれを試してみてください。しかし、今のところ私はそれを私の満足のためにkludgedしました。私はサーバーが動作しているかどうかをチェックする簡単なスクリプトを書いた。そうでない場合、スクリプトはサーバを起動します。私はそのスクリプトをrootのcrontabに入れました。それはそれを行うs'phisticated方法ではないかもしれませんが、それは動作し、私は他のものに移動することができます。 助けてくれてありがとう! – tscheingeld

関連する問題