【发布时间】:2022-02-01 20:16:42
【问题描述】:
所以我有这个我想在脚本中运行的命令:
pm2 restart my-application --update-env
我的脚本:
#!/bin/bash
sudo -u deploy bash << EOF
cd /home/deploy/my-agent
pm2 start ecosystem.json
EOF
echo "out of the deploy user"
echo "export edgeboxId=$edgeboxId">> /etc/bash.bashrc
sudo -u edgebox bash << EOF
pm2 restart my-application --update-env
EOF
echo "out of application user"
sleep infinity
此命令pm2 restart my-application --update-env 在脚本中没有按预期工作(它应该更新 pm2 的 env,但它会在不更新 env 的情况下重新启动应用程序)。它也不会抛出任何错误。命令的输出是:
[PM2] Applying action restartProcessId on app [my-application](ids: [ 0 ])
[PM2] [my-application](0) ✓
┌─────┬───────────────────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼───────────────────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ my-application │ default │ 1.0.328 │ fork │ 348 │ 0s │ 2 │ online │ 0% │ 20.9mb │ edgebox │ disabled │
└─────┴───────────────────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
但是当我直接在控制台上运行这个命令时,它按预期工作。所以我的问题是,如何使这个命令在脚本内部工作?它看起来像一些 shell 问题,但我无法弄清楚。
注意:此命令和脚本在 docker 容器内运行,docker 容器内的 shell 为 /bin/bash,版本为 5.0.3(1)-release。
【问题讨论】:
-
命令不起作用是什么意思?
echo $BASH_VERSION说什么?命令的退出代码是什么? -
@user1934428 我已经更新了问题。
-
我没有在您的更新中看到您获得的退出代码。此外,
>> /etc/bash.bashrc很显眼。我原以为您没有此文件的写权限。之后我会做一个cat /etc/bash.bashrc来验证这一点。 -
没有退出代码,因为最后一个命令是
sleep forever!?我可以在/etc/bash.bashrc看到我的变化@
标签: linux bash shell environment-variables pm2