gcs python crontab автоматизация дает google.api_core.exceptions.Forbidden: 403 - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь запустить скрипт Python из скрипта оболочки в определенное время.Сценарий оболочки запускает несколько команд для генерации некоторых файлов в каталоге, а скрипт python загружает все файлы в каталоге в Google Cloud Storage Bucket.

Я автоматизировал этот сценарий оболочки с помощью crontab.

Сценарий python gsutil.py выглядит примерно так:

from google.cloud import storage
import os

def upload(storage_client, file_path, blob_name):
    bucket = storage_client.get_bucket('some-bucket')
    blob = bucket.blob(blob_name)
    blob.upload_from_file_name(file_path)

def walker():

    rootPath = '/opt/xxx/yyy/zzz'
    storageClient = storage.Client()

    onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))]
    for file_ in onlyfiles:
        filePath = os.path.join(root, file_)
        blobName = filePath.replace(rootPath, "")
        print('file - {0} and blob - {1}', filePath, blobName)
        upload(storageClient, filePath, blobName)

def main():
    walker()

if __name__== "__main__":
    main()

Проблема, с которой я сталкиваюсь, заключается в том, что при попытке запустить сценарий оболочки с помощью bash run_script.sh это работает совершенно нормально.Но когда я пытаюсь запустить его, используя crontab , он выдает мне эту ошибку:

Traceback (most recent call last):
  File "/opt/xxx/yyy/gs_py/gsutil.py", line 28, in <module>
    main()
  File "/opt/xxx/yyy/gs_py/gsutil.py", line 25, in main
    walker()
  File "/opt/xxx/yyy/gs_py/gsutil.py", line 21, in walker
    upload(storageClient, filePath, blobName)
  File "/opt/xxx/yyy/gs_py/gsutil.py", line 7, in upload
    blob.upload_from_filename(file_path)
  File "/root/.local/share/virtualenvs/gs_py-qE0GGV3s/local/lib/python2.7/site-packages/google/cloud/storage/blob.py", line 1136, in upload_from_filename
    predefined_acl=predefined_acl,
  File "/root/.local/share/virtualenvs/gs_py-qE0GGV3s/local/lib/python2.7/site-packages/google/cloud/storage/blob.py", line 1085, in upload_from_file
    _raise_from_invalid_response(exc)
  File "/root/.local/share/virtualenvs/gs_py-qE0GGV3s/local/lib/python2.7/site-packages/google/cloud/storage/blob.py", line 1956, in _raise_from_invalid_response
    raise exceptions.from_http_status(response.status_code, message, response=response)
google.api_core.exceptions.Forbidden: 403 POST https://www.googleapis.com/upload/storage/v1/b/tercept-carousell/o?uploadType=multipart: (u'Request failed with status code', 403, u'Expected one of', 200)

Я что-то здесь упускаю?Я вошел в систему как пользователь root и поместил запись в crontab:

0 12 * * * bash /opt/xxx/yyy/run_script.sh >> /opt/xxx/yyy/script.log 2>&1 &

Команда, которая воссоздает описанный выше сценарий ошибки:

sudo bash run_script.sh

Я не совсем уверен, чтопроисходит и почему это не работает.Я использую только bash, он работает, и когда я пытаюсь добавить его в crontab или запустить его с помощью sudo , он не работает.Кто-нибудь может мне помочь?

...