【发布时间】:2018-04-14 20:35:41
【问题描述】:
我知道这个问题已经被问过无数次了,但我就是想不通。我已经阅读了有关该主题的所有页面,但我尝试过的没有任何效果。
基本上,我在 /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)
不确定要提供哪些其他信息。如果有什么需要补充的,请告诉我。
感谢任何帮助。
【问题讨论】:
标签: ubuntu nginx sinatra unicorn init.d