如何在/etc/cron.hourly配置每小时执行grive的Cron任务?及异常排查
grive 要让grive每小时通过/etc/cron.hourly自动运行,你只需要遵循这几个简单步骤:
创建可执行脚本:在
/etc/cron.hourly目录下新建一个无后缀的脚本(比如直接叫grive,因为run-parts默认会跳过包含点号的文件名),内容如下:#! /bin/sh # 切换到你的Google Drive目录 cd /path/to/your/google/drive/directory || exit 1 # 执行grive同步 grive把
/path/to/your/google/drive/directory替换成实际的目录路径。设置正确权限:确保脚本拥有可执行权限,执行命令:
chmod u+x /etc/cron.hourly/grive验证配置:你可以用
run-parts测试脚本是否会被执行:run-parts --test /etc/cron.hourly如果输出里包含你的
grive脚本,说明配置没问题,接下来它会每小时自动运行一次。
grive.sh在cron.hourly/cron.daily中未运行的排查与解决 从你的描述来看,手动运行正常但Cron不执行,结合日志和权限问题,这里有几个关键的排查点和解决方案:
1. 文件名导致run-parts跳过脚本
run-parts(Cron用来执行/etc/cron.hourly等目录下脚本的工具)默认会跳过包含点号(.)的文件名,你的脚本叫grive.sh,这会被直接忽略。解决方法:
mv /etc/cron.hourly/grive.sh /etc/cron.hourly/grive
2. 权限修改未生效的问题
你执行的chmod u+rwx grive.sh可能因为路径问题没生效,应该用绝对路径修改权限,并且确保以root身份操作:
chmod u+x /etc/cron.hourly/grive
修改后用ls -l /etc/cron.hourly/grive确认权限,输出应该包含-rwxr--r--(至少所有者有执行权限x)。
3. 外部磁盘挂载问题
你的Google Drive目录在外部硬盘/media/james/Seagate Expansion Drive/GD上,Cron运行时可能该磁盘还没挂载(比如系统启动后自动挂载延迟,或者挂载失败),导致cd命令失败,grive无法执行。
解决方法:
- 配置
/etc/fstab让磁盘开机自动挂载,添加类似这样的行(先查磁盘UUID,用blkid命令获取):
注意空格要用UUID=xxxx-xxxx /media/james/Seagate\040Expansion\040Drive/GD ext4 defaults 0 2\040转义,或者把挂载目录改成无空格的名字(比如/media/james/SeagateGD),避免路径解析问题。
4. 增加日志排查错误
Cron的环境变量和终端不同,可能grive执行时出现错误但你看不到。修改脚本添加日志输出:
#! /bin/sh LOG="/var/log/grive_sync.log" echo "=== Sync started at $(date) ===" >> $LOG # 切换目录失败时记录错误并退出 cd /media/james/Seagate\ Expansion\ Drive/GD || { echo "ERROR: Failed to enter directory" >> $LOG; exit 1; } # 把grive的输出和错误都写入日志 grive >> $LOG 2>&1 echo "=== Sync finished at $(date) ===" >> $LOG
之后查看/var/log/grive_sync.log就能知道具体哪里出错了。
5. 手动测试脚本执行
执行run-parts --report /etc/cron.hourly,然后检查日志文件和Google Drive目录,确认同步是否正常。
内容的提问来源于stack exchange,提问作者James Ray

