Я пытаюсь создать сценарий пользовательских данных EC2 для запуска других сценариев при загрузке. Однако сценарии, которые я запускаю, не распознают некоторые команды и переменные, которые я уже объявил. Я запускаю команды как пользователь «ubuntu», но он все еще не работает.
Мой сценарий пользовательских данных выглядит примерно так:
export user = "ubuntu"
sudo su $user -c ". ./run_script"
В скрипте у меня есть такие строки:
THIS_PATH = "/some/path"
echo "export SOME_PATH=$THIS_PATH" >> ~/.bashrc
source ~/.bashrc
Однако скрипт не может запуститься SOME_PATH/application, и echo $SOME_PATH это возвращает пустую строку. Я в замешательстве, потому что $SOME_PATH/application работает, когда я вхожу в EC2 с помощью SSH, а мои журналы отладки с помощью whoami возвращают «ubuntu».
Я что-то упустил здесь?
Пользователь ubuntu уже создан, когда вы звоните sudo? Попробуйте sudo su ubuntu -c "touch /tmp/sudo_test" и посмотрите, кто создал этот файл. Посмотрите на дату модификации find / -name .bashrc какой из них изменен (из корня? Это меняется после sudo su - $user ...?)
Джону: я могу создавать файлы, используя как пользователя root, так и пользователя ubuntu. Уолтеру: Да.





Ваш сценарий данных выполняется от имени пользователя root, а команда su оставляет $HOME и другие переменные ENV нетронутыми (обратите внимание, что sudo является избыточным). "су-" тоже не помогает
Поэтому не используйте ~ или $HOME, а полный путь /home/ubuntu/.bashrc
Я не думаю, что это ошибка пути. Я пробовал ваше решение, и оно не работает.
Я узнал проблему. Кажется, что source ~/.bashrc недостаточно для перезапуска оболочки — переменные среды заработали после того, как я сослался на них в другом скрипте bash.
Скрипты пользовательских данных запускаются от имени пользователя
root. Попробуйте просто создать файлы без использованияsudo, но вам нужно будетchownпередать файлы нужному пользователю, чтобы он мог получить к ним доступ.