Назад | Перейти на главную страницу

Запуск длительного процесса в cloud-init на экземпляре ec2

Я пытаюсь и не могу запустить длительную команду при запуске EC2 (Amazon Linux). Он должен работать под учетной записью пользователя ec2. Это была моя первая попытка:

#!/bin/bash
echo 'Woot 1!' > /home/ec2-user/woot1.txt
pushd /home/ec2-user/my-app-dir
nohup sudo -u ec2-user /home/ec2-user/my-app-dir/my_process.py &
echo 'Woot 2!' > /home/ec2-user/woot2.txt

Ключевой командой, которую я пытаюсь запустить, является строка «nohup» для запуска my_process.py.

Сценарий оболочки работает, когда я запускаю его от имени пользователя root из оболочки, но когда я передаю его в пользовательских данных экземплярам ec2-run и авторизуюсь в экземпляре, я вижу и woot1.txt, и woot2.txt, но my_process.py не работает. Более того, my_process.py создает файл журнала при запуске, но там нет файла журнала (и нет nohup.out), когда я передаю сценарий в качестве пользовательских данных экземплярам ec2-run.

Я пробовал поместить то же самое в форму cloud-init с теми же результатами:

#cloud-config
runcmd:
 - echo 'Woot 1!' > /home/ec2-user/woot1.txt
 - pushd /home/ec2-user/my-app-dir
 - nohup sudo -u ec2-user /home/ec2-user/my-app-dir/my_process.py &
 - echo 'Woot 2!' > /home/ec2-user/woot2.txt

Если кто-нибудь может сказать мне, в чем я ошибаюсь, я был бы признателен.

Причина, по которой процесс не запускался, заключалась в том, что экземпляр Amazon EC2 Linux похож на Red-Hat, и в этих дистрибутивах есть ошибка / функция, требующая для команды sudo tty. Во время обработки cloud-init к среде не привязан tty, поэтому он не работает.

Один ответ - отредактировать etc / sudoers и изменить строку

Defaults requiretty

к

Defaults !requiretty

По-видимому, есть и другие подходы, но у меня это сработало.

Я предполагаю, что к этой команде не привязана оболочка.

Вместо того

- echo 'Woot 1!' > /home/ec2-user/woot1.txt

Пытаться

- /bin/sh -c "echo 'Woot 1!' > /home/ec2-user/woot1.txt"