gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:33:51 25 4
gpt4 key购买 nike

我知道这个问题已经被问了无数次,但我就是想不通。我已经阅读了有关该主题的每一页,但我尝试过的所有内容都没有。

基本上,我在/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)

不确定要提供哪些其他信息。让我知道是否有任何我应该添加的内容。

任何帮助表示赞赏。

最佳答案

我以前也遇到过类似的情况,这与运行脚本的“用户”有关,当您从命令行运行时,您正在使用 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
;;

每种方法都一样

可能对您的情况有所帮助

关于ubuntu - init.d 脚本不会在重新启动时启动,但可以从命令行运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47073281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com