cron 运行网站备份 google drive api 脚本时出现“无效授权”错误

Posted

技术标签:

【中文标题】cron 运行网站备份 google drive api 脚本时出现“无效授权”错误【英文标题】:`Invalid grant` error when cron runs website backup google drive api script 【发布时间】:2018-07-06 10:13:31 【问题描述】:

我正在尝试备份我网站的文件和数据库,并通过 Google drive Api 从我的网站上传到 Google Drive。

按照这些链接遵循说明 - backup files to google drive using php https://www.matthewhipkin.co.uk/codelib/automatically-backing-up-your-web-server-files-to-googledrive-with-php/ 并做了以下 -

    从https://github.com/hippy2094/backuptogoogledrive 下载了backupgoogledrive 文件夹并将其上传到我的public_html/backup 文件夹中,并将backuptogoogle.php 重命名为backup/index.php

    我创建了客户端 ID、客户端密码和 authCode,并将它们与我的 mysql 用户名、密码和数据库名称一起放入 setting.inc。 $homedir 设置为/home/myuser/,$sitedir 设置为public_html/

    然后,我在 SSH 中运行 - php /home/user/backup/index.php

    这运行良好,生成了一个 json 文件,并且在谷歌驱动器中也找到了文件和数据库的备份。

    然后,我按如下方式设置 cron 作业 - 5 0 * * 6 /usr/local/bin/php /home/myusername/public_html/backup/index.php

    这应该在星期六 00:05 运行脚本,但它没有运行或备份到谷歌驱动器。

    之后,我将 cron 更改为每 15 分钟运行一次。我注意到文件和数据库备份将转到 home/myuser 文件夹而不是谷歌驱动器,并且该文件夹中的 error_log 每 15 分钟出现一次此错误 -

致命错误:带有消息的未捕获异常“Google_AuthException” '获取 OAuth2 访问令牌时出错,消息:'invalid_grant'' /home/myuser/public_html/backup/google-api-php-client/src/auth/Google_OAuth2.php:115

堆栈跟踪:

#0 /home/myuser/public_html/backup/google-api-php-client/src/Google_Client.php(127): Google_OAuth2->authenticate(Array, '4/SCxgUoxjnbe_0...')

#1 /home/myuser/public_html/backup/index.php(38): Google_Client->authenticate('4/SCxgUoxjnbe_0...')

#2 main 投入 /home/myuser/public_html/backup/google-api-php-client/src/auth/Google_OAuth2.php 在第 115 行`

请注意,在https://console.developers.google.com/apis 注册 Google API 时,我在凭据页面中选择了 Other 选项,而不是 Web Application,因为我的目标只是为我的网站备份。此外,当我选择 Web Application 选项并生成客户端 ID 和机密并尝试通过 SSH 中生成的 url 生成 authCode 时,它​​会在 SSH 生成的 url 中出现错误。因此,其他帖子中提到的invalid grant 的解决方案对我不起作用,因为我没有设置回调网址的选项。

请告诉我我做错了什么。为什么我能够手动而不是通过 cron 成功运行脚本?当我在 SSH 中手动运行脚本时。只有在 cron 运行时才会出现问题。

提前致谢。

【问题讨论】:

【参考方案1】:

找到以下解决方案 -

将这段代码放入文件index.php -

  chdir('/home/user/backup');

然后 cron 将文件正确备份到谷歌驱动器。所以,问题出在 cron 路径上。

【讨论】:

以上是关于cron 运行网站备份 google drive api 脚本时出现“无效授权”错误的主要内容,如果未能解决你的问题,请参考以下文章

谷歌推出备份新工具:Google Drive将同步计算机文件

通过 Google drive 备份与同步 Keepass 数据库

尝试访问 Google Drive 时服务器超时,在本地运行时有效

本地挂载Google DriveOne DriveYanDex Drive等云端硬盘

Google Drive 虚拟主机:拒绝目录列表

在JW播放器中播放Google Drive Video并获取Google Drive Video的直接链接