FreeBSD rc.d 脚本没有返回正确的 shell

FreeBSD rc.d 脚本没有返回正确的 shell

我遇到的有趣的问题是,当运行某些rc.d脚本时,它们实际上并没有退回到根 shell,而是让我以它们应该运行的用户身份留在中间 shell 中。

副作用是,所需的服务直到我exit从这个内壳中启动后才真正启动。如下所示:

[root@zeb2 /usr/local/etc/rc.d]# ./mysql-server  start
Starting mysql.
[mysql@zeb2 /usr/local/etc/rc.d]$ ps ax |grep mysql
 3352   0  S        0:00.01 /bin/sh ./mysql-server start
 3357   0  S        0:00.01 su -m mysql -c sh -c "/usr/sbin/daemon  -c -f /usr/local/bin/mysqld_safe --defaults-extra-file=/var/db/mysq
 3358   0  S        0:00.01 _su -m -c sh -c "/usr/sbin/daemon  -c -f /usr/local/bin/mysqld_safe --defaults-extra-file=/var/db/mysql/my.
 3364   0  R+       0:00.00 grep mysql
[mysql@zeb2 /usr/local/etc/rc.d]$ exit
exit
[root@zeb2 /usr/local/etc/rc.d]# ps ax |grep mysql
 3366  ??  Ss       0:00.02 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/var/db/mysql/my.cnf --user=mysql --datadir=/var/d
 3636  ??  S        0:00.13 [mysqld]
 3639   0  S+       0:00.00 grep mysql
[root@zebes2 /usr/local/etc/rc.d]#

问题似乎出在su命令上。我安装的每个端口上都不会发生这种情况,但和都会发生这种情况MySQLSABNzbd如果服务器需要重新启动并且我启用了服务,这也会导致问题,rc.conf因为它将进入内壳并挂起启动,直到我可以本地登录并输入 exit。

[root@zeb2 /usr/local/etc/rc.d]# uname -a
FreeBSD xxx.xxx.xxx.net 9.0-RELEASE-p3 FreeBSD 9.0-RELEASE-p3 #0: Tue Jun 12 01:47:53 UTC 2012     [email protected]:/usr/obj/usr/src/sys/GENERIC  i386

更新了下面的 rc.conf 输出

[root@zeb2 /usr/bin]# cat /etc/rc.conf |grep -v '#'
syslogd_flags="-a dd-wrt.om.cox.net:* -vv"
sshd_enable="YES"
ifconfig_em0="inet 192.168.1.3  netmask 255.255.255.0"
defaultrouter="192.168.1.1"
hostname="zeb2.om.cox.net"
webmin_enable="YES"
samba_enable="YES"
uuidd_enable="YES"
denyhosts_enable="YES"
inetd_enable="YES"
mysql_enable="YES"

更新 2,并请求输出

sh -x mysql-server start 的输出

软件包列表

mysql-server 的内容

更新 3 并给出答案!

.cshrc@Steve Wills 让我找到了正确的方向。最终原因是因为我从root 帐户的末尾调用了 bash shell 。在rc.d脚本中运行 su 时必须解析此文件,而对另一个 shell 的添加引用解释了为什么它会等待我exit。删除引用后,rc.d 脚本开始按预期工作。

谢谢!!

答案1

您能分享一下您的 /etc/rc.conf 和/或 /etc/rc.conf.local 吗?也许您设置了某些内容,导致了这种情况。另外,尝试将其作为“service mysql-server start”运行,看看是否会发生相同的情况?

答案2

命令su(1)更改为给定的用户或以给定用户的身份运行给定的命令。如果不查看脚本,就无法知道发生了什么。大概是脚本没有结束,或者一直在等待某事。也许脚本坏了,也许它在等待某事,而这需要很长时间(超过你的耐心)。是否有一些你应该用来运行这些脚本的包装器?(我的 Fedora 有system start some-service这个)。

相关内容