写了个脚本定时执行,有天发现命令没有正确找到我配在PATH的环境变量。

用了gdrive来备份博客,日志看到

/root/gdrive-bak-blog.sh: line 2: gdrive: command not found

百度一波发现cron读取环境变量有点搓,有两个解决方案

  • crontab里的命令先执行source

    0 8 * * * source /etc/profile && /root/gdrive-bak-blog.sh > /root/blog-bak.out 2>&1

  • 脚本里执行加载环境变量

    #!/bin/sh source /etc/profile …

附上备份脚本

#! /bin/bash
oldFileId=`gdrive list | grep 'hzblog.bak.tar.gz' | awk '{print $1}'` 
if [ -z $oldFileId ] 
then 
 echo "no backup for hzblog.bak.tar.gz"
else
 gdrive delete $oldFileId
 echo "hzblog.bak.tar.gz[id:$oldFileId] deleted"
fi

rm -f /root/hzblog.bak.tar.gz
tar -czPf hzblog.bak.tar.gz /root/hzblog
parentId=`gdrive list | grep 'hzblog' | awk '{print $1}'`
gdrive upload -p $parentId /root/hzblog.bak.tar.gz
echo "hzblog.bak.tar.gz uploaded"