155 lines
4.4 KiB
Bash
155 lines
4.4 KiB
Bash
#!/bin/bash
|
||
|
||
# 权限问题修复脚本
|
||
|
||
echo "=== 云盘后端权限修复工具 ==="
|
||
|
||
# 检查当前用户
|
||
echo "当前用户: $(whoami)"
|
||
echo "用户ID: $EUID"
|
||
echo "主目录: $HOME"
|
||
echo "当前目录: $(pwd)"
|
||
|
||
# 1. 检查和创建.config目录
|
||
echo ""
|
||
echo "1. 检查用户配置目录..."
|
||
if [ ! -d "$HOME/.config" ]; then
|
||
echo "创建 .config 目录..."
|
||
mkdir -p "$HOME/.config" || {
|
||
echo "错误: 无法创建 .config 目录"
|
||
exit 1
|
||
}
|
||
echo "✓ .config 目录创建成功"
|
||
else
|
||
echo "✓ .config 目录已存在"
|
||
fi
|
||
|
||
# 2. 检查和创建systemd用户目录
|
||
echo ""
|
||
echo "2. 检查systemd用户目录..."
|
||
SYSTEMD_USER_DIR="$HOME/.config/systemd/user"
|
||
|
||
if [ ! -d "$SYSTEMD_USER_DIR" ]; then
|
||
echo "创建systemd用户目录..."
|
||
mkdir -p "$SYSTEMD_USER_DIR" || {
|
||
echo "错误: 无法创建systemd用户目录"
|
||
echo "尝试使用sudo创建..."
|
||
sudo -u $(whoami) mkdir -p "$SYSTEMD_USER_DIR" || {
|
||
echo "错误: 无法创建systemd用户目录,尝试使用临时目录"
|
||
SYSTEMD_USER_DIR="/tmp/$(whoami)-systemd"
|
||
mkdir -p "$SYSTEMD_USER_DIR"
|
||
echo "使用临时目录: $SYSTEMD_USER_DIR"
|
||
}
|
||
}
|
||
echo "✓ systemd用户目录创建成功: $SYSTEMD_USER_DIR"
|
||
else
|
||
echo "✓ systemd用户目录已存在: $SYSTEMD_USER_DIR"
|
||
fi
|
||
|
||
# 3. 检查目录权限
|
||
echo ""
|
||
echo "3. 检查目录权限..."
|
||
echo ".config 目录权限: $(ls -ld $HOME/.config | awk '{print $1,$3,$4}')"
|
||
echo "systemd用户目录权限: $(ls -ld $SYSTEMD_USER_DIR | awk '{print $1,$3,$4}')"
|
||
|
||
# 4. 测试写入权限
|
||
echo ""
|
||
echo "4. 测试写入权限..."
|
||
TEST_FILE="$SYSTEMD_USER_DIR/.test_write"
|
||
if touch "$TEST_FILE" 2>/dev/null; then
|
||
echo "✓ 写入权限正常"
|
||
rm -f "$TEST_FILE"
|
||
else
|
||
echo "✗ 写入权限不足,尝试修复..."
|
||
chmod 755 "$HOME/.config" 2>/dev/null
|
||
chmod 755 "$SYSTEMD_USER_DIR" 2>/dev/null
|
||
|
||
if touch "$TEST_FILE" 2>/dev/null; then
|
||
echo "✓ 权限修复成功"
|
||
rm -f "$TEST_FILE"
|
||
else
|
||
echo "✗ 权限修复失败"
|
||
echo "可能的解决方案:"
|
||
echo "1. 检查磁盘空间: df -h"
|
||
echo "2. 检查用户配额: quota -u $(whoami)"
|
||
echo "3. 检查文件系统权限: mount | grep home"
|
||
echo "4. 联系系统管理员"
|
||
exit 1
|
||
fi
|
||
fi
|
||
|
||
# 5. 检查systemd用户服务是否启用
|
||
echo ""
|
||
echo "5. 检查systemd用户服务..."
|
||
if systemctl --user list-units --type=service --state=running &>/dev/null; then
|
||
echo "✓ systemd用户服务可用"
|
||
else
|
||
echo "⚠ systemd用户服务可能不可用"
|
||
echo "尝试启用用户systemd服务..."
|
||
|
||
# 对于某些系统,需要启用linger
|
||
if command -v loginctl &> /dev/null; then
|
||
if loginctl show-user $(whoami) | grep -q "Linger=no"; then
|
||
echo "启用用户linger服务..."
|
||
loginctl enable-linger $(whoami) || echo "无法启用linger,可能需要管理员权限"
|
||
fi
|
||
fi
|
||
fi
|
||
|
||
# 6. 创建测试服务文件
|
||
echo ""
|
||
echo "6. 创建测试服务文件..."
|
||
SERVICE_FILE="$SYSTEMD_USER_DIR/cloud-drive.service"
|
||
|
||
cat > "$SERVICE_FILE" << EOF
|
||
[Unit]
|
||
Description=Cloud Drive Backend Service
|
||
Documentation=https://github.com/your-repo/cloud-drive
|
||
After=network.target
|
||
|
||
[Service]
|
||
Type=simple
|
||
WorkingDirectory=$(pwd)
|
||
ExecStart=$(pwd)/venv/bin/python $(pwd)/main.py
|
||
Restart=always
|
||
RestartSec=10
|
||
StandardOutput=journal
|
||
StandardError=journal
|
||
SyslogIdentifier=cloud-drive
|
||
|
||
[Install]
|
||
WantedBy=default.target
|
||
EOF
|
||
|
||
if [ -f "$SERVICE_FILE" ]; then
|
||
echo "✓ 服务文件创建成功: $SERVICE_FILE"
|
||
echo "文件权限: $(ls -l $SERVICE_FILE | awk '{print $1,$3,$4}')"
|
||
else
|
||
echo "✗ 服务文件创建失败"
|
||
exit 1
|
||
fi
|
||
|
||
# 7. 测试systemd命令
|
||
echo ""
|
||
echo "7. 测试systemd命令..."
|
||
if systemctl --user daemon-reload 2>/dev/null; then
|
||
echo "✓ systemd用户服务重载成功"
|
||
else
|
||
echo "⚠ systemd用户服务重载失败"
|
||
echo "错误信息: $(systemctl --user daemon-reload 2>&1)"
|
||
fi
|
||
|
||
echo ""
|
||
echo "=== 权限修复完成 ==="
|
||
echo ""
|
||
echo "服务管理命令:"
|
||
echo "重载服务: systemctl --user daemon-reload"
|
||
echo "启用服务: systemctl --user enable cloud-drive"
|
||
echo "启动服务: systemctl --user start cloud-drive"
|
||
echo "查看状态: systemctl --user status cloud-drive"
|
||
echo "查看日志: journalctl --user -u cloud-drive -f"
|
||
echo ""
|
||
echo "如果systemd命令不可用,请使用手动管理脚本:"
|
||
echo "启动: ./start.sh"
|
||
echo "停止: ./stop.sh"
|
||
echo "状态: ./status.sh" |