Seafile开机启动失败的解决办法

由于 seafile 依赖于 mysql (或其他数据库程序),在通过 update-rc.d 设置为开机启动后,开机时可能 mysql 还未启动结束,系统就调用了 seafile 的启动服务,这时就会出现启动失败的情况

更新 2016.12.9 编辑服务脚本

1
sudo nano /etc/init.d/seafile-server

在 # Required-Start: 字段后加入 mysql ,如下:

1
2
3
4
5
6
7
8
9
10
11
#!/bin/sh

\### BEGIN INIT INFO
\# Provides: seafile-server
\# Required-Start: $local\_fs $remote\_fs $network mysql
\# Required-Stop: $local_fs
\# Default-Start: 2 3 4 5
\# Default-Stop: 0 1 6
\# Short-Description: Starts Seafile Server
\# Description: starts Seafile Server
\### END INIT INFO

注意关键行。表示该服务依赖于 mysql 服务,这样就会在 mysql 服务启动后才启动 seafile 服务。 重新加入开机启动

1
sudo insserv -v -d /etc/init.d/seafile-server

(在 debian6中 已经用 insserv 来替代 update-rc.d 管理开机启动) 接着重启系统,看看是否已经正常启动。


以下为延迟启动方法

检查 log 如下(/seafile/logs/seafile.ini.log)

1
2
\[10/25/16 19:30:11\] ../common/session.c(132): using config file /home/pi/seafile/conf/ccnet.conf
\[10/25/16 19:30:11\] ../common/ccnet-db.c(123): Failed to get database connection: Failed to connect to MySQL: Can't connect to MySQL server on '127.0.0.1' (111).

使用 update-rc.d 设置启动顺序依然不行,只能另辟蹊径使用脚本延迟启动。 先建立一个脚本 delayrun.sh

1
2
sleep 10
sudo service seafile-server start

延迟10秒再启动 service seafile-server 服务,这个命令的前提是 seafile-server 这个服务已经被添加到update-rc.d中管理(按照官方部署方案走的话应该都加了) 然后将该脚本赋予运行权限。

1
chmod +x delayrun.sh

加入开机启动 /etc/rc.local,在 exit 0 前面加入调用代码,如下

1
2
3
4
5
6
_IP=$(hostname -I) || true
if \[ "$_IP" \]; then
printf "My IP address is %s\\n" "$_IP"
fi
sh home/pi/seafile/delayrun.sh &
exit 0

注意修改 delayrun.sh 的路径。 由于延迟启动脚本有 sleep10秒的效果,所以必须在启动命令后面加上 & 符号,表示该命令执行在一个单独的进程中,不会影响后续的程序运行。 重起系统,不出意外已经可以正常启动seafile服务了。 这时可以将 seafile-server 服务从 update-rc.d 管理中去处掉了,反正也启动不了。用命令或者 sysy-rc-conf 工具都可以。

1
sudo update-rc.d -f seafile-server remove

tips:

使用这个方法前可以尝试用 update-rc.d 调整 seafile-server 的启动顺序,如果不行再使用延迟启动的方法。 update-rc.d 调整启动顺序

1
sudo update-rc.d seafile-server defaults 255

调整 mysql 启动顺序

1
sudo update-rc.d mysql defaults 1

  • 本文作者: Tshine Zheng
  • 本文链接: 393.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!