FTPServer自动重启的常见方法
systemd是当前Linux系统的主流初始化工具,通过创建服务单元文件可实现FTPServer(如vsftpd)的自动重启。
sudo nano /etc/systemd/system/vsftpd.service,添加以下内容(根据实际路径调整):[Unit]
Description=vsftpd FTP Server
After=network.target
[Service]
Type=simple
User=ftpuser # 运行FTP服务的用户
Group=ftpuser # 运行FTP服务的组
ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf # FTP服务启动命令
ExecReload=/bin/kill -HUP $MAINPID # 重载配置的命令
Restart=on-failure # 当服务异常退出时自动重启
RestartSec=5 # 重启间隔时间(秒)
[Install]
WantedBy=multi-user.target # 系统多用户模式启动时启用服务
sudo systemctl daemon-reload # 重新加载systemd配置
sudo systemctl enable vsftpd # 设置开机自启
sudo systemctl start vsftpd # 立即启动服务
sudo systemctl status vsftpd查看服务是否运行正常,若出现“active (running)”则表示成功。supervisord可监控并管理进程,确保FTPServer崩溃后自动重启。
sudo apt-get install supervisor
sudo nano /etc/supervisor/conf.d/vsftpd.conf,添加以下内容:[program:vsftpd]
command=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf # FTP启动命令
autostart=true # 随supervisord启动而启动
autorestart=true # 进程崩溃时自动重启
stderr_logfile=/var/log/vsftpd.err.log # 错误日志路径
stdout_logfile=/var/log/vsftpd.out.log # 输出日志路径
sudo supervisorctl reread # 重新读取配置
sudo supervisorctl update # 更新进程列表
sudo supervisorctl start vsftpd # 启动FTP服务
sudo supervisorctl status vsftpd查看进程是否处于“RUNNING”状态。若系统不支持systemd或supervisord,可通过cron定期重启FTPServer(适用于所有Linux发行版)。
sudo crontab -e,在文件末尾添加以下内容(每分钟重启一次,可根据需求调整时间):* * * * * /usr/sbin/service vsftpd restart # Debian/Ubuntu系统
# 或
* * * * * /sbin/service vsftpd restart # CentOS/RHEL系统
对于使用SysVinit的旧版Linux系统(如CentOS 6),可通过init.d脚本实现开机自启。
sudo nano /etc/init.d/vsftpd,添加以下内容(根据实际路径调整):#!/bin/sh
### BEGIN INIT INFO
# Provides: vsftpd
# Required-Start: $local_fs $network
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Start vsftpd FTP server at boot time
# Description: Enable vsftpd service provided by daemon.
### END INIT INFO
PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/vsftpd
DAEMON_ARGS="/etc/vsftpd/vsftpd.conf"
NAME=vsftpd
DESC="vsftpd FTP Server"
test -x $DAEMON || exit 0
set -e
case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon --start --quiet --exec $DAEMON -- $DAEMON_ARGS
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --exec $DAEMON
echo "$NAME."
;;
restart|force-reload)
echo -n "Restarting $DESC: "
start-stop-daemon --stop --quiet --exec $DAEMON
sleep 1
start-stop-daemon --start --quiet --exec $DAEMON -- $DAEMON_ARGS
echo "$NAME."
;;
status)
status_of_proc -p /var/run/$NAME.pid $DAEMON && exit 0 || exit $?
;;
*)
echo "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload|status}" >&2
exit 1
;;
esac
exit 0
sudo chmod +x /etc/init.d/vsftpd # 赋予执行权限
sudo update-rc.d vsftpd defaults # Debian/Ubuntu系统
# 或
sudo chkconfig vsftpd on # CentOS/RHEL系统
sudo service vsftpd start # 启动服务
sudo service vsftpd status查看服务是否运行。