Linux 使用gdrive将文件上载到google驱动器在crontab上不起作用
我为我的电脑写了备份脚本。备份场景如下所示:Linux 使用gdrive将文件上载到google驱动器在crontab上不起作用,linux,crontab,Linux,Crontab,我为我的电脑写了备份脚本。备份场景如下所示: 0 3,12 * * * sh /local_share/backup/backup2.0.sh &>> /local_share/backup/backup.sh.log 根目录下的所有目录每天两次(凌晨3点和12点)绑定到tar.gz中,这个归档文件将使用gdrive应用程序上传到谷歌硬盘。每凌晨3点 这是剧本 #!/bin/bash
0 3,12 * * * sh /local_share/backup/backup2.0.sh &>> /local_share/backup/backup.sh.log
根目录下的所有目录每天两次(凌晨3点和12点)绑定到tar.gz中,这个归档文件将使用gdrive应用程序上传到谷歌硬盘。每凌晨3点
这是剧本
#!/bin/bash
#Program: arklab backup script version 2.0
#Author: namil son
#Last modified date: 160508
#Contact: 21100352@handong.edu
#It should be executed as a super user
export LANG=en
MD=`date +%m%d`
TIME=`date +%y%m%d_%a_%H`
filename=`date +%y%m%d_%a_%H`.tar.gz
HOST=$HOSTNAME
backuproot="/local_share/backup/"
backup=`cat $backuproot/backup.conf`
gdriveID="blablabla" #This argument should be manually substituted to google-drive directory ID for each server.
#Start a new backup period at January first and June first.
if [ $MD = '0101' -o $MD = '0601' ]; then
mkdir $backuproot/`date +%y%m`
rm -rf $backuproot/`date --date '1 year ago' +%y%m`
echo $backuproot/`date +%y%m` > $backuproot/backup.conf #Save directory name for this period in backup.conf
backup=`cat $backuproot/backup.conf`
gdrive mkdir -p $gdriveID `date +%y%m` > $backup/dir
awk '{print $2}' $backup/dir > dirID
rm -f $backup/dir
fi
#make tar ball
tar -g $backup/snapshot -czpf $backup/$filename / --exclude=/tmp/* --exclude=/mnt/* --exclude=/media/* --exclude=/proc/* --exclude=/lost+found/* --exclude=/sys/* --exclude=/local_share/backup/* --exclude=/home/* \
--exclude=/share/*
#upload backup file using gdrive under the path written in dirID
if [ `date +%H` = '03' ]; then
gdrive upload -p `cat $backup/dirID` $backup/$filename
gdrive upload -p `cat $backup/dirID` $backup/`date --date '15 hour ago' +%y%m%d_%a_%H`.tar.gz
fi
问题就在这里
当在crontab上运行这个脚本时,除了将tarball上传到googledrive之外,它工作得非常好,尽管手动运行脚本时整个脚本工作得非常好。只有上载进程在crontab上运行时不起作用
有人能帮我吗
Crontab条目如下所示:
0 3,12 * * * sh /local_share/backup/backup2.0.sh &>> /local_share/backup/backup.sh.log
我有完全相同的问题,但有一些细微的差别。我在CentOS系统上使用gdrive。设置很好。作为root用户,我设置了gdrive。在命令行中,“驱动器列表”工作正常。我使用了以下博客帖子来设置gdrive: 我编写了一个PHP脚本来备份一些目录。当我从命令行以root用户身份运行PHP脚本时,一切正常,并上传到GoogleDrive 所以我扔:
1 1 * * * php /root/my_backup_script.php
进入root的crontab。脚本执行得很好,但上传到谷歌硬盘的操作不正常。我做了一些调试,行:
drive upload --file /root/myfile.bz2
只是不起作用。唯一的命令行返回值是空字符串。非常混乱。我不是unix专家,但我认为当crontab作为用户运行时,它作为用户运行(在本例中为root用户)。为了测试,我做了以下操作,这是非常不安全的,不推荐使用:
我创建了一个根密码为/root/.rootpassword的文件
chmod 500.rootpassword
将crontab行更改为:
1 1 * * * cat /root/.rootpassword | sudo -kS php /root/my_backup_script.php
现在它可以工作了,但这是一个可怕的解决方案,因为根密码存储在系统上的纯文本文件中。该文件只能由root用户读取,但它仍然是一个非常糟糕的解决方案
我不知道为什么(同样,没有unix专家)我必须让root crontab以sudo的方式运行命令才能使其工作。我知道问题出在gdrive设置期间生成的gdrive令牌上。crontab运行时,令牌不匹配,上载失败。但是当您将crontab sudo作为root并运行php脚本时,它就可以工作了
我想到了一个可能的解决方案,它不需要在系统上的文本文件中存储根密码。我现在很累,还没试过。我已经为这个问题工作了大约4天,尝试了各种谷歌硬盘备份解决方案。。。都失败了。基本上是这样的:
0 3,12 * * * sh /local_share/backup/backup2.0.sh &>> /local_share/backup/backup.sh.log
在PHP/Apache解释器中运行gdrive安装程序。这将(可能)将gdrive令牌设置为apache。例如:
在/home/public_html/gdrive_setup.PHP中创建一个PHP脚本。此文件需要逐步完成整个gdrive和令牌设置
在浏览器中运行脚本,获得gdrive和令牌的所有设置
测试gdrive,编写一个PHP脚本,如下所示:
$cmd = exec("drive list");
echo $cmd;
另存为gdrive_test.php并在浏览器中运行。如果它输出你的谷歌硬盘文件,它就工作了
用php编写备份脚本。将它放在一个不可索引的web目录中,并将其称为随机的东西,如2DJAj23DAJE123.php
现在,无论何时在web浏览器中调出2DJAj23DAJE123.php,都应该运行备份
最后,编辑根目录的crontab并添加:
1 1 * * * wget http://my-website.com/non-indexable-directory/2DJAj23DAJE123.php >/dev/null 2>&1
理论上,这应该是可行的。不存储任何密码。唯一的安全漏洞是,如果其他人执行了2DJAj23DAJE123.php,他们可能会运行您的备份
可以添加进一步的检查,比如在2DJAj23DAJE123.php开始时检查系统时间,并在执行之前确保它与crontab运行时匹配。如果时间不匹配,只需退出脚本,什么也不做
以上都是理论,没有经过检验。我认为应该行得通,但我对这个问题感到非常厌倦
我希望这是有帮助的,不要过于复杂,但谷歌驱动器是复杂的,因为他们在今年早些时候转换身份验证方法。您在网上找到的许多帖子/博客帖子都不起作用。我也有同样的问题,并通过指示
驱动器
命令文件的位置进行了修复
例:
我也有同样的情况。
这是我的解决方案
将命令gdrive更改为绝对路径更改为gdrive命令
例如:
不要这样设置cron
0 1 * * * gdrive upload abc.tar.gz
使用绝对路径
0 1 * * * /usr/local/bin/gdrive upload abc.tar.gz
它将完美地工作有时由于gdrive的配置路径而出现问题,这意味着gdrive无法找到默认配置,因此为了避免此类问题,我们添加了
--config
标志
gdrive upload --config /home/<you>/.gdrive -p <google_drive_folder_id> /path/to/file_to_be_uploaded
gdrive upload--config/home/.gdrive-p/path/to/file\u to\u be\u upload
来源:您正在使用哪个客户端?您是如何安装的。很可能,脚本需要
gdrive
命令的完整路径。我正在使用gdrive,可以在这里下载:非常感谢您真诚的回答!