Сценарий выключения не выполняется на виртуальной машине Google Cloud - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь заставить сценарий завершения работы выполнить с помощью виртуальной машины Google Cloud.

Я вижу этот вывод при запуске gcloud compute connect-to-serial-port startup-test-v

Apr  8 22:01:25 startup-test-v shutdown-script: INFO Starting shutdown scripts.
Apr  8 22:01:25 startup-test-v shutdown-script: INFO Found shutdown-script in metadata.
Apr  8 22:01:26 startup-test-v shutdown-script: INFO shutdown-script: No change requested; skipping update for [startup-test-v].
Apr  8 22:01:27 startup-test-v shutdown-script: INFO shutdown-script: Return code 0.
Apr  8 22:01:27 startup-test-v shutdown-script: INFO Finished running shutdown scripts.

Я создаю вытесняемый экземпляр из Командная строка и ее отключение в GUI.

gcloud compute instances create $INSTANCE_NAME \
    --zone=$ZONE \
    --image-family=$IMAGE_FAMILY \
    --image-project=deeplearning-platform-release \
    --maintenance-policy=TERMINATE \
    --machine-type=$INSTANCE_TYPE \
    --boot-disk-size=50GB \
    --metadata="install-nvidia-driver=True" \
    --preemptible \
    --scopes="storage-rw,cloud-platform" \
    --metadata-from-file="shutdown-script=gce/shutdown_test.sh"

shutdown_test.sh это просто:

#!/bin/bash
echo "+++ Shutdown test +++"
exit 0

Сценарии запуска работают как положено. Я также попытался поменять флаг --metadata-from-file на --metadata-from-file shutdown-script=gce/shutdown_test.sh без изменений.

Идеи? Похоже, GCE находит сценарий завершения работы, но не выполняет его.

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Сценарий выключения не предоставляет никакого вывода ни на последовательную консоль, ни на текущую консольную консоль S SH, поскольку он работает как пользователь root и его stdout не маршрутизируется ни на /dev/tty*, ни /dev/ttyS*.

Чтобы убедиться, что скрипт завершения работы действительно работает, вы можете ввести в ключ метаданных VM shutdown-script что-то вроде следующего:

#!/bin/bash 
ofile=/var/tmp/shutdown.txt 
echo "+++ Running shutdown script +++"
echo "id = $(id)" > $ofile 
echo "script_file path = $(realpath $0)" >> $ofile 
echo "script_file rights, user, group = $(stat -c "%A %U %G" $0)" >> $ofile

Далее подключитесь к последовательной консоли и к S SH чтобы подготовиться к просмотру отсутствия какого-либо вывода, предоставляемого сценарием завершения работы.

Затем остановитесь и запустите ВМ.

В конце вы увидите, что скрипт выключения фактически работал как пользователь root и оставил файл журнала:

$ ls -l /var/tmp/shutdown.txt 
 rw-r--r-- 1    root    root    165     Apr  9 18:40    shutdown.txt 
$ cat /var/tmp/shutdown.txt  
 id = uid=0(root) gid=0(root) groups=0(root) 
 script_file path = /tmp/metadata-scripts196132089/shutdown-script 
 script_file rights, user, group = -rwxr-xr-x root root 

Скрипт выключения работает для вытесняемых экземпляров так же, как и для обычных экземпляров , Разница в том, что первые имеют более короткий период отключения (30 секунд).

0 голосов
/ 10 апреля 2020

Оказывается, что изображения могут перезаписывать метаданные сценария завершения работы, определенные в CLI

В моем случае pytorch-latest-gpu изображение изменяет метаданные shutdown-script, чтобы указывать на собственный сценарий завершения работы , Это происходит при первом запуске.

Если вы отредактируете этот скрипт - определенный в /opt/deeplearning/bin/shutdown_script.sh - вы можете получить любое поведение при выключении, которое вам нравится. В противном случае вы можете редактировать метаданные так, чтобы они указывали на ваш скрипт. Сценарии завершения работы будут отображаться в журналах последовательного вывода.

Apr  9 23:26:46 new-test-d shutdown-script: INFO Starting shutdown scripts.
Apr  9 23:26:47 new-test-d shutdown-script: INFO Found shutdown-script in metadata.
Apr  9 23:26:47 new-test-d shutdown-script: INFO shutdown-script: ++++++++++++++ Shutdown test +++++++++++++++++

Вы можете предотвратить изменение сценария изображения shutdown-script, не дав экземпляру разрешение на добавление метаданных, пропустив cloud-platform в --scope. Или вы можете отредактировать shutdown-script в GUI после запуска. Вы также можете отредактировать его обратно через скрипт запуска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...