无法将脚本添加到 init.d

无法将脚本添加到 init.d

我已经在远程 ubuntu 服务器上安装了 gerrit。现在我希望它在服务器重新启动时自动启动。我正在尝试遵循这个:

http://gerrit-documentation.googlecode.com/svn/Documentation/2.3/install.html#rc_d

这是一个两行:

sudo ln -snf `pwd`/home/gerrit2/gerrit_application/bin/gerrit.sh /etc/init.d/gerrit.sh
sudo ln -snf ../init.d/gerrit.sh /etc/rc3.d/S90gerrit

我已验证这两个文件均已创建。但是当我重新启动应用程序时,它没有启动。我仍然需要手动启动它:

root@mm11:/home/gerrit2/gerrit_application/bin# ./gerrit.sh start

我该如何调试/修复这个问题?

我也尝试过:

sudo ln -snf /home/gerrit2/gerrit_application/bin/gerrit.sh /etc/init.d/gerrit
sudo update-rc.d gerrit defaults

这使:

root@mm11:/home/gerrit2# update-rc.d gerrit defaults
 Adding system startup for /etc/init.d/gerrit ...
   /etc/rc0.d/K20gerrit -> ../init.d/gerrit
   /etc/rc1.d/K20gerrit -> ../init.d/gerrit
   /etc/rc6.d/K20gerrit -> ../init.d/gerrit
   /etc/rc2.d/S20gerrit -> ../init.d/gerrit
   /etc/rc3.d/S20gerrit -> ../init.d/gerrit
   /etc/rc4.d/S20gerrit -> ../init.d/gerrit
   /etc/rc5.d/S20gerrit -> ../init.d/gerrit

答案1

首先,您应该将脚本复制到脚本池中:

/etc/init.d/

linux 有一组目录,其中包含一组到该池的链接,处于不同的运行级别:

/etc/rc0.d # for runlevel 0 for trun off system in all of dirstos
/etc/rc1.d # runlevel 1, for single user in all distros
/etc/rc2.d # runlevel 2 , default runlevel for debian-base dirstros
/etc/rc3.d # runlevel 3, in redhat-base systems, using for everything without graphical mode
/etc/rc4.d # runlevel 4,reserved by system
/etc/rc5.d  #runlevel 5 , in  Redhat base , defualt runlevel
/etc/rc6.d  # for runlevel 6 for reboot system in all of distros

你应该运行:

ln -s /etc/init.d/YOUR_SCRIPT /etc/rcNUMBER.d/{S OR K}NUMYOUR_SCRIPT

例如:

ln -s /etc/init.d/apache2 /etc/rc2.d/S99apache2

S OR K : S statrt, K: Kill
NUM before script: priority of run, if you have two scrip such S10squid amd S99apache, At first squid will be run then apache. 

update-rc.d对比chkconfig

update-rc.dDebian-base在系统中工作,在系统chkconfig中工作redhat-base

答案2

您将链接到目录中的脚本rc3.d,该目录是在运行级别 3 中启动的服务的目录。Ubuntu 中的默认运行级别是 2 IIRC。因此,您可能需要将第二行更改为:

sudo ln -snf ../init.d/gerrit.sh /etc/rc2.d/S90gerrit

当然,服务器可能已配置为在另一个运行级别启动。找出当前的运行级别

who -r

答案3

首先,尝试以 root 身份手动运行脚本(无需重新启动系统):

 /etc/init.d/gerrit start

如果这有效,但服务在启动时仍然无法启动,问题可能是在尝试执行脚本时,PATH 变量可能不是您所期望的。尝试在脚本中将 PATH 设置为合理的默认值 ( gerrit.sh)

例如

#!/bin/bash
PATH=/sbin:/usr/sbin:/bin:/usr/bin

#...

相关内容