Пользовательские данные AWS EC2: команды не распознаются при использовании sudo

Я пытаюсь создать сценарий пользовательских данных 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».

Я что-то упустил здесь?

Скрипты пользовательских данных запускаются от имени пользователя root. Попробуйте просто создать файлы без использования sudo, но вам нужно будет chown передать файлы нужному пользователю, чтобы он мог получить к ним доступ.

John Rotenstein 03.07.2019 23:46

Пользователь ubuntu уже создан, когда вы звоните sudo? Попробуйте sudo su ubuntu -c "touch /tmp/sudo_test" и посмотрите, кто создал этот файл. Посмотрите на дату модификации find / -name .bashrc какой из них изменен (из корня? Это меняется после sudo su - $user ...?)

Walter A 03.07.2019 23:50

Джону: я могу создавать файлы, используя как пользователя root, так и пользователя ubuntu. Уолтеру: Да.

Brian Park 08.07.2019 16:19
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
1 195
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ваш сценарий данных выполняется от имени пользователя root, а команда su оставляет $HOME и другие переменные ENV нетронутыми (обратите внимание, что sudo является избыточным). "су-" тоже не помогает

Поэтому не используйте ~ или $HOME, а полный путь /home/ubuntu/.bashrc

Я не думаю, что это ошибка пути. Я пробовал ваше решение, и оно не работает.

Brian Park 08.07.2019 16:20
Ответ принят как подходящий

Я узнал проблему. Кажется, что source ~/.bashrc недостаточно для перезапуска оболочки — переменные среды заработали после того, как я сослался на них в другом скрипте bash.

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