Files
full-stack-doc/backend/fix_permissions.sh
2025-10-14 20:05:29 +08:00

155 lines
4.4 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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"