python - python 中的 "Permission Denied"从 jenkins 复制文件,而不是从 shell

标签 python shell tomcat jenkins

我在 python 中有一个脚本,它使用 OptionParser 获取一个路径,并使用 shutil.copy 将该路径中的文件复制到另一个具有时间戳+名称的路径。

当我从 shell 启动脚本时,一切正常。但是当 Jenkins 启动脚本时,出现以下异常:

Traceback (most recent call last):
  File "/home/helper/add_file.py", line 101, in <module>
    uploader.run()
  File "/home/helper/add_file.py", line 80, in run
    shutil.copy(self.filename,destination_path+disk_filename)
  File "/usr/lib/python2.7/shutil.py", line 119, in copy
    copyfile(src, dst)
  File "/usr/lib/python2.7/shutil.py", line 83, in copyfile
    with open(dst, 'wb') as fdst:
IOError: [Errno 13] Permission denied: u'/home/blabla/destinationfolder/1399362213.01file.apk'

使用 whoami 和 pwd,我使用相同的用户(tomcat7)和相同的位置(jenkins 项目工作区)在 shell 中重新创建执行,并且没有权限被拒绝的问题,用户 tomcat7 在目标目录和源目录中具有完全写入权限目录...

那么,为什么对于相同的用户并使用相同的目标和源路径,从 shell 一切正常并从 Jenkins 执行我得到这个“权限被拒绝”异常?

已更新

我用 getpass.getuser() 测试了用户,结果在 jenkins 和 shell (tomcat7) 中是一样的。

我将权限从 775 更改为 777,然后我可以在目录中写入...但这不是解决方案,因为我不想向所有人授予写入权限。用户 tomcat7 在有权写入文件夹的组中,所以...就像 Jenkins 忽略了用户 tomcat7 的组(我检查了/etc/group 文件并且 tomcat7 在具有权限的组中)

最佳答案

最后,我发现了这个: https://unix.stackexchange.com/questions/45184/why-this-error-cannot-create-directory-foo-permission-denied

我的问题是一样的...我从 tomcat7 用户更改了组,但我的 tomcat 自上次启动以来一直在执行,使用的是旧用户。重启tomcat服务后,tomcat用户获取到正确组,在jenkins中脚本执行正常。

关于python - python 中的 "Permission Denied"从 jenkins 复制文件,而不是从 shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23489601/

相关文章:

linux - 使用 sed 提取索引

java - 在 Tomcat 中处理未经授权的错误消息响应正文

apache - 如何设置 apache 来代理同一台服务器上的两个不同的 tomcat?

java - 在 Tomcat 中设置堆大小

python - Pandas 按多列分组并将结果作为新列放入 map 中

python - 如何过滤包含相似模式的行

python - 矩阵的维度不等于相等

linux - 如何使用 bash 别名作为命令行参数

python - 将参数作为 HTML 属性传递

linux - 这里文件 : no parameter expansion