温馨提示×

debian golang日志权限怎么设

小樊
44
2026-09-07 06:09:27
栏目: 编程语言

在 Debian 上跑 Go 程序时,“日志权限”通常分 三种情况,下面按常见场景给你说明,基本够用。


一、日志文件路径权限(最常见)

1. 选择日志目录

推荐放到:

/var/log/myapp/

创建目录并授权:

sudo mkdir -p /var/log/myapp
sudo chown -R www-data:www-data /var/log/myapp
sudo chmod 755 /var/log/myapp

如果你的 Go 程序是用 systemd 跑的,用户通常是 www-data 或你自建用户


2. Go 代码里写日志

f, _ := os.OpenFile("/var/log/myapp/app.log",
    os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
log.SetOutput(f)

0644 含义:

  • 所有者:读写
  • 其他用户:只读

二、systemd 服务运行用户权限

如果你用 systemd 管理 Go 程序:

示例 service

[Unit]
Description=My Go App

[Service]
User=www-data
Group=www-data
ExecStart=/opt/myapp/myapp
Restart=always

[Install]
WantedBy=multi-user.target

⚠️ 如果日志目录不属于 www-data,就会 Permission denied


三、日志轮转(非常重要)

使用 logrotate

新建:

sudo nano /etc/logrotate.d/myapp

内容:

/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    create 0644 www-data www-data
}

测试:

sudo logrotate -d /etc/logrotate.d/myapp

四、常见问题排查

1. 权限 denied

ls -l /var/log/myapp
ps aux | grep myapp

2. 临时测试(不推荐生产)

sudo chmod 777 /var/log/myapp

五、推荐最佳实践 ✅

  • 日志放 /var/log/yourapp
  • 用非 root 用户运行
  • logrotate 管理
  • Go 里日志文件权限用 0644

如果你愿意,可以告诉我:

  • Go 程序怎么启动(直接跑 / systemd / docker)
  • 日志是 stdout 还是文件

我可以给你 更精确的配置示例

0