init.d脚本不会在重新启动时启动,但可以从命令行运行

时间:2017-11-02 10:41:26

标签: ubuntu nginx sinatra unicorn init.d

我知道这个问题被问了几千次,但我无法解决这个问题。我已经阅读了关于该主题的每一页,但我没有尝试过任何工作。

基本上,我在/etc/init.d中有一个脚本,它在命令行中工作正常但在启动时没有。我不知道它是否完全没有运行或者它会出现某种错误。

Robinson是一个自行开发的Sinatra应用程序。

首先,这是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 # 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工作。这是config.ru的全部内容:

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

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

# run request routine
run Robinson

这是Robinson的nginx配置文件

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

unicorn.rb看起来像这样:

# 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"

值得注意的是,当我重新启动服务器时,没有任何条目添加到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)

不确定要提供的其他信息。如果我有任何意见,请告诉我。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

之前我有类似的东西,与运行脚本的'用户'的事实有关,当你从命令行运行时,你正在运行sudo。

我使用的解决方案是设置变量,然后执行以下脚本

[root@origin ~]# luajit test.lua
17
1234567890abcdefg
// this is the result that I only append a 'g' to `str`.

和每种方法相同

可能对您的情况有所帮助