这个提示:
```bash
sudo -iu www
此帐户目前不可用。
```
说明 `www` 这个用户的登录 Shell 被设置成了:
```bash
/sbin/nologin
```
或:
```bash
/usr/sbin/nologin
```
也可能是:
```bash
/bin/false
```
所以它不能正常登录。
---
## 1. 先查看 www 用户信息
执行:
```bash
grep '^www:' /etc/passwd
```
你可能会看到类似:
```text
www:x:1001:1001::/home/www:/sbin/nologin
```
最后一列就是登录 shell:
```text
/sbin/nologin
```
这就是报错原因。
---
# 方案一:临时以 www 用户执行命令
如果你只是想临时用 `www` 用户执行 PM2,可以这样:
```bash
su -s /bin/bash www
```
或者:
```bash
sudo -u www -s /bin/bash
```
如果提示没有家目录或权限异常,需要指定 HOME:
```bash
sudo -u www HOME=/home/www /bin/bash
```
然后再执行:
```bash
whoami
```
应该输出:
```text
www
```
---
# 方案二:允许 www 用户正常登录
如果你确定要长期用 `www` 用户运行 PM2,可以把它的 shell 改成 `/bin/bash`。
执行:
```bash
usermod -s /bin/bash www
```
然后再试:
```bash
sudo -iu www
```
或者:
```bash
su - www
```
---
## 还要确认 www 有家目录
查看:
```bash
grep '^www:' /etc/passwd
```
例如:
```text
www:x:1001:1001::/home/www:/bin/bash
```
如果家目录是 `/home/www`,确认目录存在:
```bash
ls -ld /home/www
```
如果不存在,创建:
```bash
mkdir -p /home/www
chown -R www:www /home/www
```
如果家目录不是 `/home/www`,比如是:
```text
/var/www
```
那就确认它有权限:
```bash
chown -R www:www /var/www
```
---
# 方案三:更推荐,新建专门的应用用户
不太建议直接用 `www` 用户跑 PM2,尤其是它本来是 nginx/apache/php-fpm 的运行用户。
更推荐创建一个专门用户,例如:
```bash
useradd -m -s /bin/bash appuser
```
然后把项目目录给它:
```bash
chown -R appuser:appuser /你的项目目录
```
切换用户:
```bash
sudo -iu appuser
```
再启动 PM2:
```bash
cd /你的项目目录
pm2 start app.js --name myapp
pm2 save
```
这样更清晰,也更安全。
---
# 如果你坚持用 www 跑 PM2,完整操作示例
假设项目目录是:
```bash
/www/wwwroot/myapp
```
执行:
```bash
usermod -s /bin/bash www
mkdir -p /home/www
chown -R www:www /home/www
chown -R www:www /www/wwwroot/myapp
```
切换到 `www`:
```bash
sudo -iu www
```
进入项目:
```bash
cd /www/wwwroot/myapp
```
检查 node/npm/pm2:
```bash
node -v
npm -v
pm2 -v
```
如果 PM2 没有:
```bash
npm install -g pm2
```
启动应用:
```bash
pm2 start app.js --name myapp
pm2 save
```
配置开机自启:
```bash
pm2 startup
```
它会输出一条命令,类似:
```bash
sudo env PATH=$PATH:/usr/local/bin pm2 startup systemd -u www --hp /home/www
```
复制输出的那条命令,用 root 执行。
然后回到 `www` 用户:
```bash
pm2 save
```
---
# 如果不想修改 www 的登录 shell
也可以临时这样执行 PM2:
```bash
sudo -u www HOME=/home/www /bin/bash -c 'pm2 list'
```
或者启动项目:
```bash
sudo -u www HOME=/home/www /bin/bash -c 'cd /www/wwwroot/myapp && pm2 start app.js --name myapp'
```
但这种方式不如直接创建 `appuser` 清晰。
---
# 总结
你这个错误的直接原因是:
```text
www 用户禁止登录
```
可以用下面命令解决:
```bash
usermod -s /bin/bash www
mkdir -p /home/www
chown -R www:www /home/www
sudo -iu www
```
但更推荐:
```bash
useradd -m -s /bin/bash appuser
```
然后用 `appuser` 专门运行 PM2。