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 时服务器超时,在本地运行时有效