首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何授权根运行gsutil?

如何授权根运行gsutil?
EN

Stack Overflow用户
提问于 2017-08-05 23:47:39
回答 1查看 2.3K关注 0票数 2

backup_to_gcs.sh是一个备份脚本,它使用gsutil将文件复制到Google。

当用户wolfv (谁安装了)调用时,备份脚本就会运行:

代码语言:javascript
复制
$ /home/wolfv/scripts/backup_to_gcs/backup_to_gcs.sh
backup_to_gcs.sh in progress ...
backup_to_gcs.sh pass

到目前一切尚好。但是root需要运行gsutil,这样就可以从Anacron调用备份脚本。因此,让根运行脚本。

根和沃尔夫共享凭证是安全的,因为他们是同一个人。

根如何运行gsutil?

我正在Linux上运行gsutil 4.27。

UPDATE_1

由于mhouglum,root现在可以调用备份脚本。只需要在root的.bashrc中设置一些参数。详情如下。

对于用户wolfv和root用户,"gsutil版本-l“中的两行是不同的:

代码语言:javascript
复制
using cloud sdk
pass cloud sdk credentials to gsutil

当用户wolfv调用时,备份脚本将运行。以下是wolfv数据(BOTO_CONFIG和BOTO_PATH为空):

代码语言:javascript
复制
$ gsutil version -l
gsutil version: 4.27
checksum: 522455e2d24593ff3a2d3d237eefde57 (OK)
boto version: 2.47.0
python version: 2.7.13 (default, Jun 26 2017, 10:20:05) [GCC 7.1.1 20170622 (Red Hat 7.1.1-3)]
OS: Linux 4.11.11-300.fc26.x86_64
multiprocessing available: True
using cloud sdk: True
pass cloud sdk credentials to gsutil: True
config path(s): /home/wolfv/.boto, /home/wolfv/.config/gcloud/legacy_credentials/REDACTED_EMAIL@gmail.com/.boto
gsutil path: /home/wolfv/google-cloud-sdk/platform/gsutil/gsutil
compiled crcmod: True
installed via package manager: False
editable install: False
$ echo $BOTO_CONFIG

$ echo $BOTO_PATH

$ echo $PATH
/home/wolfv/google-cloud-sdk/bin:/home/wolfv/google-cloud-sdk/bin:/usr/lib64/qt-3.3/bin:/usr/lib64/ccache:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin

这是用户wolfv .bashrc:

代码语言:javascript
复制
$ cat .bashrc
# .bashrc

# after changing .bashrc, use source command to reload your .bashrc file
#   $ source "$HOME/.bashrc"
#   $ source ~/.bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi

# User specific aliases and functions
export PATH=${PATH}:$HOME/scripts

# The next line updates PATH for the Google Cloud SDK.
if [ -f '/home/wolfv/google-cloud-sdk/path.bash.inc' ]; then source '/home/wolfv/google-cloud-sdk/path.bash.inc'; fi

# The next line enables shell command completion for gcloud.
if [ -f '/home/wolfv/google-cloud-sdk/completion.bash.inc' ]; then source '/home/wolfv/google-cloud-sdk/completion.bash.inc'; fi

当根用户调用时,备份脚本也会运行。以下是根数据:

代码语言:javascript
复制
$ sudo -s
# gsutil version -l
gsutil version: 4.27
checksum: 522455e2d24593ff3a2d3d237eefde57 (OK)
boto version: 2.47.0
python version: 2.7.13 (default, Jun 26 2017, 10:20:05) [GCC 7.1.1 20170622 (Red Hat 7.1.1-3)]
OS: Linux 4.11.11-300.fc26.x86_64
multiprocessing available: True
using cloud sdk: False
pass cloud sdk credentials to gsutil: False
config path(s): /home/wolfv/.boto, /home/wolfv/.config/gcloud/legacy_credentials/REDACTED_EMAIL@gmail.com/.boto
gsutil path: /home/wolfv/google-cloud-sdk/platform/gsutil/gsutil
compiled crcmod: True
installed via package manager: False
editable install: False
[0 root@localhost ~]
# echo $BOTO_CONFIG

[0 root@localhost ~]
# echo $BOTO_PATH
/home/wolfv/.boto:/home/wolfv/.config/gcloud/legacy_credentials/REDACTED_EMAIL@gmail.com/.boto
[0 root@localhost ~]
# echo $PATH
/usr/lib64/ccache:/sbin:/bin:/usr/sbin:/usr/bin:/home/wolfv/google-cloud-sdk/platform/gsutil:/home/wolfv/google-cloud-sdk/bin:/home/wolfv/google-cloud-sdk/platform/gsutil:/home/wolfv/google-cloud-sdk/bin

这是根.bashrc:

代码语言:javascript
复制
# cat .bashrc
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi

# added by wolf so anacron can call backup script
export PATH=${PATH}:/home/wolfv/google-cloud-sdk/platform/gsutil:/home/wolfv/google-cloud-sdk/bin
export BOTO_PATH=/home/wolfv/.boto:/home/wolfv/.config/gcloud/legacy_credentials/REDACTED_EMAIL@gmail.com/.boto

# The next line updates PATH for the Google Cloud SDK.
#if [ -f '/home/wolfv/google-cloud-sdk/path.bash.inc' ]; then source '/home/wolfv/google-cloud-sdk/path.bash.inc'; fi

# The next line enables shell command completion for gcloud.
#if [ -f '/home/wolfv/google-cloud-sdk/completion.bash.inc' ]; then source '/home/wolfv/google-cloud-sdk/completion.bash.inc'; fi

UPDATE_2

终端上的根和anacron都可以运行备份脚本。

当root运行脚本时,文件会在GCS上更新;很好。

当anacron运行脚本时,它会返回错误代码127;

这个名为ls.sh的简单脚本重新介绍了该行为:

代码语言:javascript
复制
#!/bin/bash

LOG_FILE="/home/wolfv/scripts/test/ls.log"

echo "I am $(whoami). date=$(date)" >> "$LOG_FILE"

gsutil ls >> "$LOG_FILE"
errorCode=$?

echo "errorCode=$errorCode" >> "$LOG_FILE"

根用户从终端调用脚本:

代码语言:javascript
复制
# /home/wolfv/scripts/test/ls.sh

Ls.log的结果:

代码语言:javascript
复制
I am root. date=Mon Aug 14 05:21:23 MDT 2017
gs://wolfv/
gs://wolfv2/
gs://wolfvtest/
errorCode=0

anacron调用脚本:

代码语言:javascript
复制
# anacron -n -f ls_id

Ls.log的结果:

代码语言:javascript
复制
I am root. date=Mon Aug 14 05:21:38 MDT 2017
errorCode=127

是什么导致错误代码127?

UPDATE_3

我重复了UPDATE_2的测试,但是使用了cron而不是anacron。结果与获得相同errorCode=127的cron相似。

沃尔夫从终端调用脚本:

代码语言:javascript
复制
$ /home/wolfv/scripts/test/ls.sh

Ls.log的结果:

代码语言:javascript
复制
I am wolfv. date=Fri Aug 18 20:58:57 MDT 2017
gs://wolfv/
gs://wolfv2/
gs://wolfvtest/
errorCode=0

cron调用脚本:

代码语言:javascript
复制
$ crontab -l
#test gsutil on cron
*/10 * * * * /home/wolfv/scripts/test/ls.sh

Ls.log的结果:

代码语言:javascript
复制
I am wolfv. date=Fri Aug 18 21:20:01 MDT 2017
errorCode=127

gsutil脚本从终端运行良好,但不从cron/anacron运行。

是什么导致cron和anacron返回错误代码127?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-07 09:21:47

运行sudo -s后,检查是否将所有内容设置为您期望的值:

  • echo $BOTO_CONFIG是否显示正确的boto文件?如果没有,可能根的.bashrc没有被获取吗?
  • echo $PATH是否包括您添加的gsutil目录?
  • 运行gsutil version -l时,您应该看到:
    • config path(s)标签,后面跟着/home/wolfv/.boto
    • gsutil path标签,后面跟着/home/wolfv/google-cloud-sdk/platform/gsutil/gsutil。如果不是这样的话,可能会有一个gsutil可执行文件出现在您的路径中,在之前会显示出您所附加的gsutil目录,并且您可能希望尝试将gsutil目录放在您的路径中,以便首先找到它,例如export PATH=/home/wolfv/google-cloud-sdk/platform/gsutil:${PATH}

如果这里的一切看起来都很好,那么您可以同时运行gsutil version -l作为自己和根,并比较输出,让您了解在这些环境中配置的不同。

编辑:

下面注释的TL;DR是:如果您试图加载多个boto配置文件,您应该取消设置BOTO_CONFIG (它只需要一个文件路径),而应该使用BOTO_PATH环境变量,它允许指定系统上由os.pathsep计算结果分隔的多个文件路径(:在Linux上,;在Windows上)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45527330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档