3

これは /etc/crontab、CentOS 6.6 の私のエントリです:

0 0 */1 * * fredrik /home/fredrik/google-cloud-sdk/bin/gsutil -d -m rsync -r -C [src] [dst] &> [log]

そして、私はこのエラーが発生しています:OSError: [Errno 13] Permission denied: '/.config'

シェルで実行すると、コマンドは正常に実行されます。gsutil へのフル パスがないと実行できないことに気付いた0 0 */1 * * fredrik gsutil ...ので、cron を実行している環境に何か不足していると思いますか?

完全なトレースバックは次のとおりです。

Traceback (most recent call last):
  File "/home/fredrik/google-cloud-sdk/bin/bootstrapping/gsutil.py", line 68, in <module>
    bootstrapping.PrerunChecks(can_be_gce=True)
  File "/home/fredrik/google-cloud-sdk/bin/bootstrapping/bootstrapping.py", line 279, in PrerunChecks
    CheckCredOrExit(can_be_gce=can_be_gce)
  File "/home/fredrik/google-cloud-sdk/bin/bootstrapping/bootstrapping.py", line 167, in CheckCredOrExit
    cred = c_store.Load()
  File "/home/fredrik/google-cloud-sdk/bin/bootstrapping/../../lib/googlecloudsdk/core/credentials/store.py", line 195, in Load
    account = properties.VALUES.core.account.Get()
  File "/home/fredrik/google-cloud-sdk/bin/bootstrapping/../../lib/googlecloudsdk/core/properties.py", line 393, in Get
    return _GetProperty(self, _PropertiesFile.Load(), required)
  File "/home/fredrik/google-cloud-sdk/bin/bootstrapping/../../lib/googlecloudsdk/core/properties.py", line 618, in _GetProperty
    value = callback()
  File "/home/fredrik/google-cloud-sdk/bin/bootstrapping/../../lib/googlecloudsdk/core/properties.py", line 286, in <lambda>
    'account', callbacks=[lambda: c_gce.Metadata().DefaultAccount()])
  File "/home/fredrik/google-cloud-sdk/bin/bootstrapping/../../lib/googlecloudsdk/core/credentials/gce.py", line 179, in Metadata
    _metadata_lock.lock(function=_CreateMetadata, argument=None)
  File "/usr/lib64/python2.6/mutex.py", line 44, in lock
    function(argument)
  File "/home/fredrik/google-cloud-sdk/bin/bootstrapping/../../lib/googlecloudsdk/core/credentials/gce.py", line 178, in _CreateMetadata
    _metadata = _GCEMetadata()
  File "/home/fredrik/google-cloud-sdk/bin/bootstrapping/../../lib/googlecloudsdk/core/credentials/gce.py", line 73, in __init__
    _CacheIsOnGCE(self.connected)
  File "/home/fredrik/google-cloud-sdk/bin/bootstrapping/../../lib/googlecloudsdk/core/credentials/gce.py", line 186, in _CacheIsOnGCE
    config.Paths().GCECachePath()) as gcecache_file:
  File "/home/fredrik/google-cloud-sdk/bin/bootstrapping/../../lib/googlecloudsdk/core/util/files.py", line 465, in OpenForWritingPrivate
    MakeDir(full_parent_dir_path, mode=0700)
  File "/home/fredrik/google-cloud-sdk/bin/bootstrapping/../../lib/googlecloudsdk/core/util/files.py", line 44, in MakeDir
    os.makedirs(path, mode=mode)
  File "/usr/lib64/python2.6/os.py", line 150, in makedirs
    makedirs(head, mode)
  File "/usr/lib64/python2.6/os.py", line 157, in makedirs
    mkdir(name, mode)
OSError: [Errno 13] Permission denied: '/.config'
4

5 に答える 5

9

これを機能させるのを手伝ってくれた Mike と jterrace に感謝します。最終的に、次の環境変数を修正する必要がありました: PATH、HOME、BOTO_CONFIG (その他のデフォルトのものを除く)。

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/home/fredrik/google-cloud-sdk/bin
HOME=/home/fredrik
BOTO_CONFIG="/home/fredrik/.config/gcloud/legacy_credentials/[your-email-address]/.boto"

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

  0  0 */1 *  * fredrik   gsutil -d -m rsync -r -C /local-folder/ gs://my-bucket/my-folder/ > /logs/gsutil.log 2>&1

> gsutil.log 2>&1stdout と stderrの両方を同じファイルにパイプします。また、次回 gsutil を実行したときにログ ファイルが上書きされます。ログ ファイルに追加するには、 を使用します>> gsutil.log 2>&1。これは、Linux と OS X の両方で安全なはずです。

-dデバッグ フラグが大量のデータに膨大なログ ファイルを作成することに気付いたので、個人的にはそのフラグをオプトアウトするかもしれません。

于 2014-12-15T08:49:14.433 に答える
4

cron から実行すると、おそらく別の boto 構成ファイルが取得されます。次の両方の方法を (root として、次に cron を介して) 実行してみて、2 つのケースで異なる構成ファイル リストが得られるかどうかを確認してください。

gsutil -D ls 2>&1 | grep config_file_list   

これが発生する理由は、ジョブを実行する前に cron がほとんどの環境変数の設定を解除するためです。そのため、gsutil を実行する前に、cron スクリプトで BOTO_CONFIG 環境変数を手動で設定する必要があります。つまり、次のようになります。

BOTO_CONFIG="/root/.boto"
gsutil rsync ...
于 2014-12-12T09:02:39.520 に答える
-1

gsutilApacheを実行しているPHPから画像を管理しようとしている人のために-

apache-sharedおよびchgrp/chown'd www-dataという名前の新しいディレクトリを作成しました(または、Apache を実行しているユーザーは、「top」を実行して確認してください)。.boto ファイルをディレクトリにコピーし、問題なく以下を実行しました。

shell_exec('export BOTO_CONFIG=/apache-shared/.boto && export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/home/user/google-cloud-sdk/bin && gsutil command image gs://bucket');
于 2016-10-12T03:11:29.497 に答える