Linux ftpshut命令用于在指定时间关闭FTP服务器,优雅地停止FTP服务并通知已连接用户。
ftpshut [选项] 时间 [警告消息...]
| 选项 | 说明 |
|---|---|
-l 分钟 |
在关闭前几分钟拒绝新连接 |
-d 分钟 |
在关闭前几分钟断开现有连接 |
-V |
显示版本信息 |
--help |
显示帮助信息 |
时间 |
关闭时间(格式:+分钟、HHMM或now) |
| 格式 | 说明 | 示例 |
|---|---|---|
+分钟 |
从现在开始的分钟数 | +30 (30分钟后) |
HHMM |
24小时制时间 | 2230 (22:30) |
now |
立即关闭 | now |
# 立即关闭FTP服务器
ftpshut now
# 立即关闭并显示自定义警告消息
ftpshut now "服务器即将关闭进行紧急维护"
# 30分钟后关闭FTP服务器
ftpshut +30
# 在今天22:30关闭FTP服务器
ftpshut 2230
# 指定时间并添加通知消息
ftpshut 2230 "服务器将于22:30关闭进行日常维护,请保存您的工作。"
# 30分钟后关闭,提前10分钟拒绝新连接
ftpshut -l 10 +30
# 60分钟后关闭,提前5分钟断开现有连接
ftpshut -d 5 +60
# 组合使用-l和-d选项
ftpshut -l 15 -d 5 +45 "服务器将在45分钟后关闭"
#!/bin/bash
# 系统维护前自动关闭FTP服务器脚本
# 设置变量
SHUTDOWN_TIME="+30" # 30分钟后关闭
WARNING_MSG="服务器将于30分钟后关闭进行系统维护,请及时完成您的操作。"
LOG_FILE="/var/log/ftp_shutdown.log"
# 记录关闭操作
echo "$(date): 计划FTP服务器关闭" >> "$LOG_FILE"
# 执行ftpshut命令
if ftpshut -l 10 -d 5 "$SHUTDOWN_TIME" "$WARNING_MSG"; then
echo "$(date): FTP关闭计划已设置" >> "$LOG_FILE"
echo "FTP服务器将在30分钟后关闭"
else
echo "$(date): FTP关闭计划设置失败" >> "$LOG_FILE"
echo "错误:无法设置FTP关闭计划"
exit 1
fi
# 等待关闭时间到达后执行其他维护任务
sleep 1800 # 等待30分钟
echo "$(date): 开始执行系统维护任务" >> "$LOG_FILE"
# 这里可以添加其他维护命令
# 要取消ftpshut计划,需要删除shutmsg文件
# 通常位于/etc或/var/run目录下
sudo rm -f /etc/shutmsg
# 或
sudo rm -f /var/run/shutmsg
# 重启FTP服务器以清除所有关闭状态
sudo systemctl restart wu-ftpd
# 或
sudo systemctl restart vsftpd
# 检查是否存在shutmsg文件
ls -la /etc/shutmsg 2>/dev/null || ls -la /var/run/shutmsg 2>/dev/null
# 查看shutmsg文件内容(如果存在)
cat /etc/shutmsg 2>/dev/null || cat /var/run/shutmsg 2>/dev/null
# 使用ftpwho查看当前FTP连接状态
ftpwho
# 检查FTP服务器状态
sudo systemctl status wu-ftpd
ftpshut命令通过创建shutmsg文件来工作,FTP服务器会定期检查此文件:
# shutmsg文件内容示例
2000 1030 0020 0010
系统维护通知:服务器将于20:00关闭进行维护
请在此时间前完成所有文件传输操作。
字段说明:
对于现代FTP服务器(如vsftpd、proftpd),可能有不同的关闭方法:
# 停止vsftpd服务
sudo systemctl stop vsftpd
# 禁用vsftpd开机启动
sudo systemctl disable vsftpd
# 重启vsftpd服务
sudo systemctl restart vsftpd
# 停止proftpd服务
sudo systemctl stop proftpd
# 使用proftpd控制工具
sudo ftpshut now -f /etc/proftpd.conf
# 重启proftpd服务
sudo systemctl restart proftpd
# Ubuntu/Debian系统
sudo apt-get update
sudo apt-get install wu-ftpd
# CentOS/RHEL系统(可能需要EPEL仓库)
sudo yum install epel-release
sudo yum install wu-ftpd
# 验证安装
which ftpshut
ftpshut --version
# 编辑wu-ftpd配置文件
sudo nano /etc/wu-ftpd/ftpaccess
# 确保以下配置启用(示例)
shutdown /etc/shutmsg
email root@localhost
loginfails 3
class all real,guest,anonymous *
limit all 20 Any /etc/msgs/msg.toomany
readme README* login
readme README* cwd=*
message /welcome.msg login
message .message cwd=*
compress yes all
tar yes all
chmod no guest,anonymous
delete no anonymous
overwrite no anonymous
rename no anonymous
log transfers anonymous,real inbound,outbound
可能原因: wu-ftpd未安装
解决: 安装wu-ftpd软件包
sudo apt-get install wu-ftpd
可能原因: FTP服务器未配置shutdown指令
解决: 检查FTP服务器配置
# 检查wu-ftpd配置
grep shutdown /etc/wu-ftpd/ftpaccess
# 确保包含:shutdown /etc/shutmsg
解决: 检查消息配置和权限
# 确保FTP服务器配置了message指令
grep message /etc/wu-ftpd/ftpaccess
# 检查shutmsg文件权限
ls -la /etc/shutmsg
解决: 删除shutmsg文件并重启服务
# 删除shutmsg文件
sudo rm -f /etc/shutmsg
# 重启FTP服务
sudo systemctl restart wu-ftpd
ftpwho - 显示FTP服务器用户连接信息ftpcount - 显示FTP服务器连接计数ftprestart - 重启FTP服务器systemctl - 系统服务管理工具service - 传统服务管理工具kill - 终止进程