我知道这个问题被问了几千次,但我无法解决这个问题。我已经阅读了关于该主题的每一页,但我没有尝试过任何工作。
基本上,我在/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)
不确定要提供的其他信息。如果我有任何意见,请告诉我。
感谢任何帮助。
答案 0 :(得分:0)
之前我有类似的东西,与运行脚本的'用户'的事实有关,当你从命令行运行时,你正在运行sudo。
我使用的解决方案是设置变量,然后执行以下脚本
[root@origin ~]# luajit test.lua
17
1234567890abcdefg
// this is the result that I only append a 'g' to `str`.
和每种方法相同
可能对您的情况有所帮助