初次提交
This commit is contained in:
155
backend/fix_permissions.sh
Normal file
155
backend/fix_permissions.sh
Normal file
@@ -0,0 +1,155 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user