Как подключиться к экземпляру gcloud и выполнить команду при запуске или последовательно в одной строке - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь запустить команду при запуске моего сервера gcloud vm. Я добавил следующую команду в ключ пользовательских метаданных консоли:

startup-script 

значение:

#! /bin/bash
parallel 'screen -d -m python3 Documents/myscript.py' ::: arg1 arg2

Но когда я запускаю экземпляр vm, он не запускается, потому что я не видеть любые экраны, когда я печатаю screen -list. Однако, когда я подключаюсь с помощью инструмента gcp через S SH, используя следующую команду для подключения

gcloud beta compute ssh --zone "us-west1-c" "instance-1" --project "unique-kakaw-123456" 

, а затем последовательно запускаю

parallel 'screen -d -m python3 Documents/myscript.py' ::: arg1 arg2

, он работает правильно.

Как мне сделать так, чтобы мой скрипт запускался при запуске на gcp, или, если это не удалось, используйте команду gcloud, чтобы запустить команду в той же строке, чтобы затем, когда я нажимаю клавишу ввода, она подключалась к серверу и запускалась команда сразу после. Потому что, если я помещу обе вышеуказанные команды в одну строку и добавлю; это не сработает, очевидно.

По какой-то причине я могу добавить скрипт в r c .d и обновить его на своей ubuntu p c дома, и он работает нормально. Я не знаю, почему это не работает на gcp.

1 Ответ

0 голосов
/ 26 марта 2020

Скрипт запуска должен работать. Вот что может происходить:

1. Сценарий Python не выполняется, потому что он не может быть найден

Документация Compute Engine говорит:

Экземпляр всегда выполняет сценарии запуска как root после сеть доступна.

Итак, если скрипт Python находится в вашем домашнем каталоге, укажите полный путь (замените [USER] на реального пользователя):

#! /bin/bash
parallel 'screen -d -m python3 /home/[USER]/Documents/myscript.py' ::: arg1 arg2

2. Python скрипт запускается и затем выходит, поэтому экран закрывает окно

Руководство пользователя экрана гласит:

Когда программа завершается, экран (по умолчанию) убивает окно, которое содержало это. Если это окно было на переднем плане, дисплей переключается на ранее отображенное окно; если ничего не осталось, экран выходит.

Таким образом, если ваш сценарий Python завершается преждевременно, добавьте его в ваш / etc / screenr c:

zombie qr

Вот что делает этот параметр:

Когда в команде zomb ie указана строка из двух ключей, «dead» windows останется в списке.


Для записи я скопировал конфигурацию вашего сценария запуска в мой экземпляр GCP (предоставив полный путь), и я могу подтвердить, что он работает: было два * * * * * экраны , запущенные с моим скриптом Python, каждый со своим аргументом.

...