2017-11-02 24 views
0

나는이 질문에 bajillion 시간을 물었지만이 사실을 알 수는 없습니다. 내가 주제에 대해 할 수있는 모든 페이지를 읽었으나 나는 아무것도 시도하지 않았다.init.d 스크립트는 재부팅시 시작되지 않지만 명령 줄에서 작동합니다.

기본적으로 /etc/init.d에 명령 줄에서 제대로 작동하지만 시작시에는 작동하지 않는 스크립트가 있습니다. 그것이 전혀 실행되지 않거나 어떤 종류의 오류가 발생하는지 나는 모른다.

로빈슨은 자체 개발 한시나 트라 응용 프로그램입니다.

#!/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 앱은 매우 간단합니다. 지금은 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

나는거야 그것으로 실험해라. 그러나 지금 나는 그것을 나의 만족에 kludged했다. 서버가 실행 중인지 확인하는 간단한 스크립트를 작성했습니다. 그렇지 않으면 스크립트가 서버를 시작합니다. 그 스크립트를 루트의 crontab에 넣었습니다. 그것은 그것을 할 s'phisticated 방법이되지 않을 수도 있지만 작동하지만 나는 다른 것들로 이동할 수 있습니다. 도움 주셔서 감사합니다. – tscheingeld