Почему этот скрипт работает, никогда не прекращается, если я изменяю пользователя внутри скрипта?

У меня есть действительно простой скрипт Bash с 5 командами, работающими под пользователем root. Если я запускаю команды вручную один за другим, все работает - нет проблем. Но, как я запускаю его как файл my-deploy.sh через команду

bash /root/custom-scripts/deploy/my-deploy.sh 2>> /var/log/www-deploy/tatrytec.eu.log

кажется безграничным процессом. Вот сценарий:

#!/bin/bash
# Run this script as bash command like: bash create-apache-site.sh

cd /var/www/html/tatrytec.eu

git pull

# Change user bacause of composer install warrning
su vlado

composer install  --no-scripts

npm install --production

он начинает бегать, и я могу видеть результат потянутого потягивания в терминал. Но тогда он умирает без какой-либо ошибки, и он все еще работает. Я могу остановить это через Ctrl + Y. Я что-то не так с этим пользователем, но, как я писал раньше, если я запускаю команды один за другим, работает. Я не понимаю. Кто-нибудь может сказать мне, что может быть проблемой? Спасибо.

11
задан 4 February 2021 в 15:52

4 ответа

  1. su vlado понадобится пароль , если только он не запущен от имени root.
  2. su vlado будет ждать команды ввода
  3. после того, как su valdo не будет выполнен внутри su, но после выхода su valdo

, что произойдет

cd /var/www/html/tatrytec.eu  # change dir

git pull # pull git repos

# Change user bacause of composer install warrning
su vlado # either ask password or wait for input

composer install  --no-scripts # if this get executed, you are no longer as vlado

  • , ключевым моментом является то, что su vlado создаст новую оболочку, которая проигнорирует (как есть) следующую строку в оригинальном bash скрипте.
  • когда вы копируете/вставляете, у вас нет этого ограничения (так как вы копируете внутри новой оболочки vlado)

Я пытаюсь объяснить более подробно, какой пользователь/что случилось

cd /var/www/html/tatrytec.eu  # ROOT change dir

git pull # ROOT pull git repos

# Change user bacause of composer install warrning
su vlado # VLADO wait for input
new shells as VLADO> sample command
new shells as VALDO> exit

composer install  --no-scripts # ROOT run composer

предложил исправление

в качестве root

#!/bin/bash
# Run this script as bash command like: bash create-apache-site.sh

cd /var/www/html/tatrytec.eu

git pull

# Change user bacause of composer install warrning
su vlado  <<EOF

composer install  --no-scripts

npm install --production

EOF

где

  • su vlado << EOF .... EOF подаст все строки на su vlado
13
ответ дан 18 March 2021 в 23:37

Вы, кажется, хотите запустить последние строки в вашем сценарии как пользователь Vlado. Существует чистый способ сделать это:

sudo -u vlado  your_command 

Так что последние несколько строк вашего сценария будут выглядеть так:

sudo -u vlado composer install  --no-scripts
sudo -u vlado npm install --production
0
ответ дан 18 March 2021 в 23:37

Я думаю, SU VLADO нужен ввод пароля.

Вы можете использовать sudo и сделать его не нужен пароль для определенных команд, путем модификации / etc / sudoers

1
ответ дан 18 March 2021 в 23:37

Использование этого вместо этого:

#!/bin/bash
# Run this script as bash command like: bash create-apache-site.sh

cd /var/www/html/tatrytec.eu

git pull

# Change user bacause of composer install warrning
su vlado -c 'composer install  --no-scripts; npm install --production'

-C или - команда для SU позволяет вам запустить команду.

10
ответ дан 18 March 2021 в 23:37

Другие вопросы по тегам:

Похожие вопросы: