Mysql

FreeBSD rc.d 腳本不會返回到正確的 shell

  • March 6, 2013

我有趣的問題是,當執行一些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     root@i386-builder.daemonology.net:/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伺服器的內容

更新 3 的答案!

@Steve Wills 讓我找到了正確的方向。最終原因是因為我從.cshrcroot 帳戶的末尾呼叫了 bash shell。在通過腳本執行 su 時必須解析此文件rc.d,並且添加的對另一個 shell 的引用解釋了為什麼它會坐下來等我exit。刪除引用後,rc.d 腳本開始按預期工作。

謝謝!!

你能分享你的 /etc/rc.conf 和/或 /etc/rc.conf.local 嗎?也許您設置的某些東西會導致這種情況。另外,嘗試將其作為“service mysql-server start”執行,看看是否會發生同樣的事情?

su(1)命令更改為給定的使用者或以給定使用者的身份執行給定的命令。不看劇本,就無法知道發生了什麼。大概腳本只是沒有結束,或者一直在等待什麼。也許腳本壞了,也許它正在等待一些只需要很長時間(超過你的耐心)的東西。您應該使用一些包裝器來執行這些腳本嗎?(我的 Fedora 有system start some-service這個)。

引用自:https://serverfault.com/questions/484074