You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下通过service运行ExpressJS写入SQLite3提示只读错误求助

解决SQLITE_READONLY权限问题

核心问题分析

你的service配置里DynamicUser=yes会覆盖User=ubuntu和Group=nogroup的设置,导致Express应用以systemd动态生成的匿名用户运行——这个用户不在www-data组内,没有数据库目录和文件的写入权限。而你手动执行node app.js时用的是ubuntu用户(属于www-data组),所以能正常写入数据库。

修复步骤

1. 修正systemd服务配置

编辑/etc/systemd/system/app.service,做以下修改:

  • 移除DynamicUser=yes(该配置会强制使用临时动态用户,忽略你指定的User/Group)
  • 将Group=nogroup改为Group=www-data
  • 修正PATH变量的错误(原配置usr/local/bin缺少根目录前缀,改为/usr/local/bin)

修改后的完整配置:

[Unit]
Description=App

[Service]
ExecStart=/home/node/website.com/app.js
Restart=always
User=ubuntu
Group=www-data
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/home/node/website.com

[Install]
WantedBy=multi-user.target

2. 重新加载systemd并重启服务

执行以下命令使配置生效:

sudo systemctl daemon-reload
sudo systemctl restart app.service

3. 验证服务状态

检查服务是否正常运行,查看日志确认错误是否消失:

sudo systemctl status app.service
sudo journalctl -u app.service -f

额外检查(可选)

如果问题仍存在,确认U盘挂载参数是否为读写模式:

mount | grep /mnt/db-drive

若输出包含ro(只读),编辑/etc/fstab中对应挂载行,将ro改为rw,然后重新挂载:

sudo mount -o remount,rw /mnt/db-drive

内容的提问来源于stack exchange,提问作者Andrew Jones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 23:40:31