У меня есть действительно простой скрипт 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. Я что-то не так с этим пользователем, но, как я писал раньше, если я запускаю команды один за другим, работает. Я не понимаю. Кто-нибудь может сказать мне, что может быть проблемой? Спасибо.
su vlado
понадобится пароль su vlado
будет ждать команды ввода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 скрипте. Я пытаюсь объяснить более подробно, какой пользователь/что случилось
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
Вы, кажется, хотите запустить последние строки в вашем сценарии как пользователь Vlado. Существует чистый способ сделать это:
sudo -u vlado your_command
Так что последние несколько строк вашего сценария будут выглядеть так:
sudo -u vlado composer install --no-scripts
sudo -u vlado npm install --production
Я думаю, SU VLADO
нужен ввод пароля.
Вы можете использовать sudo и сделать его не нужен пароль для определенных команд, путем модификации / etc / sudoers
Использование этого вместо этого:
#!/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
позволяет вам запустить команду.