Вопрос или проблема
При развертывании из CI, как пользователь, который запустил PM2, pm2 restart appname
всегда приводит к [PM2][ERROR] Process or Namespace appname not found
whoami/who на развертывании показывает правильного пользователя.
Пробовал менять пользователей, а также местоположение PM2:
/usr/local/bin/pm2 restart appname
приводит к тому же процессу, который не найден.
Команда CI:
script:
- pm2 restart appname
или:
deploy: 'ssh -o StrictHostKeyChecking=no $DEPLOY_USER@$DEPLOY_IP "pm2 restart appname"'
script:
- "eval $deploy"
После первой команды “pm2 start appname” выполните “pm2 save”, это синхронизирует процесс с ранее сохраненным списком.
В CI скрипт включите “pm2 save” после рестарта
пример:
- выполните: sudo pm2 restart appname
- выполните: sudo pm2 save
Мне это помогло, надеюсь, вы нашли свое решение.
Если вы получаете [PM2][ERROR] Script not found: /root/appname
Сначала запустите следующее:
pm2 start npm –name “appname” — run “start:dev”
Затем, посмотрите/выполните вышеуказанное от Debapriya Das, pm2 start appname и pm2 save
Ответ или решение
ТЕОРИЯ
При развертывании приложений с использованием GitLab CI с помощью процесс-менеджера PM2, может возникнуть ошибочный вывод [PM2][ERROR] Process or Namespace appname not found
, что указывает на невозможность обнаружения указанного процесса или пространства имен. Эта ошибка часто вызывается несоответствием окружения выполнения, некорректными путями или отсутствием синхронизации состояния процессов.
ПРИМЕР
Рассмотрим ситуацию: при выполнении команды pm2 restart appname
внутри GitLab CI, происходит ошибка, сообщающая, что процесс или пространство имен "appname" не найдено. Даже если вы уверены в том, что пользователь, от лица которого запускался PM2, совпадает с указанным в CI, ошибка все еще может проявляться. Пробовали изменения в команде, такие как указание полного пути /usr/local/bin/pm2
, но это не решает проблему.
ПРИМЕНЕНИЕ
Для решения этой проблемы следует рассмотреть несколько аспектов:
-
Сохранение состояния процессов:
- После изначального запуска приложения с помощью
pm2 start appname
выполните командуpm2 save
. Эта команда сохранит текущее состояние процессов и позволит PM2 запоминать их между перезагрузками и рестартами.
- После изначального запуска приложения с помощью
-
Проверка окружения:
- Убедитесь, что все переменные окружения и конфигурации, необходимые для запуска PM2, корректно настроены в CI/CD. Это включает правильного пользователя, права доступа и прочие зависимости.
-
Правильная последовательность в GitLab CI:
- В вашем
.gitlab-ci.yml
убедитесь, что выполняются командыpm2 restart
иpm2 save
после успешного запуска процессов. Пример секцииscript
:script: - pm2 restart appname - pm2 save
- В вашем
-
Обход потенциальных проблем с различиями в окружении:
- В некоторых случаях использование SSH для выполнения удалённых команд может сработать лучше. Пример:
script: - ssh -o StrictHostKeyChecking=no $DEPLOY_USER@$DEPLOY_IP "pm2 restart appname && pm2 save"
- В некоторых случаях использование SSH для выполнения удалённых команд может сработать лучше. Пример:
-
Развертывание через NPM:
- В некоторых случаях может помочь запуск через NPM, если используется Node.js приложение. Например:
pm2 start npm --name "appname" -- run "start:dev" pm2 save
- В некоторых случаях может помочь запуск через NPM, если используется Node.js приложение. Например:
Следуя этим рекомендациям, вы сможете устранить ошибку и правильно настроить процесс развертывания с использованием GitLab CI и PM2. Теперь ваша настройка CI/CD должна работать более гладко, избегая нежелательных сбоев, связанных с управлением процессами.