Запуск gsutil на экземпляре с использованием подпроцесса python - права доступа? - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть скрипт на python, который выполняет вычисления на экземплярах Google Compute Engine.Код работает хорошо с точки зрения выполнения вычислений, но в определенных точках кода ему нужно добавлять / удалять файлы из корзины облачного хранилища, и я делаю это с помощью gsutil.Это хорошо работает при запуске с моего локального компьютера, но не работает, когда тот же код запускается из экземпляра облака Google.«Не работает» сообщение об ошибке выдает сообщение об ошибке, но мой код продолжает выполняться и просто игнорирует шаги, связанные с gsutil.

Насколько я понимаю из документации Google, экземпляры gcloud загружаются с "gsutil"."утилита уже установлена.Мои экземпляры загружаются, запуская скрипт, подобный следующему (где мое действительное имя пользователя Google):

#! /bin/bash

sudo apt-get update
sudo apt-get -yq install python-pip
sudo pip install --upgrade google-cloud
sudo pip install --upgrade google-cloud-storage
sudo pip install --upgrade google-api-python-client
sudo pip install --upgrade google-auth-httplib2

mkdir -p /home/<xxxx>/code
mkdir -p /home/<xxxx>/rawdata
mkdir -p /home/<xxxx>/processeddata
sudo chown -R <xxxx> /home/<xxxx>

gsutil cp gs://<codestorebucket>/worker-python-code/* /home/<xxxx>/code/
gsutil -m cp gs://<rawdatabucket>/* /home/<xxxx>/rawdata/

Я пока не запускаю свой код из загрузочного скрипта, так как хочу "SSH" войти в экземпляр и запустить его самиз командной строки, пока я все еще развиваюсь.Когда я SHH в экземпляр, все каталоги были созданы и весь код и необработанные файлы данных были скопированы.Я могу запустить свой «.py» файл, и он запускается, но есть строки, в которых используется команда python:

subprocess.call('gsutil -q rm gs://<mybuckname>/<myfilename>', shell=True)

Это приводит к ошибке, которая гласит:

ERROR: (gsutil) Failed to create the default configuration. Ensure your have the correct permissions on: [/home/<xxxx>/.config/gc
loud/configurations].
  Could not create directory [/home/<xxxx>/.config/gcloud/configurations]: Permission denied.

Если этопредоставляет любые подсказки, в файле "daemon.log" есть строка ошибки, которая гласит:

chown: invalid user: ‘<xxxxx>’

, которая сообщается при запуске командной строки sudo chown ...

Экземплярыиметь полный доступ ко всем API.Если я запускаю

whoami

Ответ "xxxxx".Если я запускаю

echo $UID

Ответ - 1000.

Я новичок в Linux, так как я только "узнал" об этом из-за необходимости что-то делать в экземплярах Google.Здесь есть ссылка здесь , где у пользователя появляется похожая проблема.Он исправляет это с помощью командной строки типа sudo chown, но когда я запускаю эквивалентную команду, мне говорят, что он «не может получить доступ» /home/paulgarlick07/.config/ ': нет такого файла или каталога "

IЯ действительно запутался, и любая помощь будет очень цениться.Если для решения этой проблемы потребуется дополнительная информация, сообщите мне!

1 Ответ

0 голосов
/ 12 декабря 2018

gsutil не программа.Это скрипт.Поэтому вам нужно выполнить оболочку с gsutil в качестве аргумента командной строки.Вам нужно будет передать полный путь к gsutil, который может отличаться в вашей системе.

subprocess.call('/bin/sh /usr/bin/gsutil -q rm gs://<mybuckname>/<myfilename>', shell=True)

Если вы запускаете gsutil из службы, вам необходимо убедиться, что пользователь, работающий с этой службой, запущенпод настройкой gsutil.gsutil хранит свои файлы конфигурации на основе домашнего каталога пользователя, в котором он выполняется.

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