前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux 命令在终端能执行 丢进 crontab 就报错

linux 命令在终端能执行 丢进 crontab 就报错

作者头像
lukachen
发布2023-10-22 15:34:17
1620
发布2023-10-22 15:34:17
举报
文章被收录于专栏:LukaChen Blog

终端内命令与 crontab 内命令对比

在终端输入以下命令可以直接运行,但丢进 crontab 就有问题了

代码语言:javascript
复制
echo -e "=== $(date '+%Y-%m-%d %H:%M:%S') start ===\n" >> /tmp/backup.log && cd /home/lukachen && rsync -chavzP --stats lukachen@192.168.1.1:/data/www/backup/* /home/lukachen/backup >> /tmp/backup.log 2>&1 && echo -e "=== $(date '+%Y-%m-%d %H:%M:%S') end ===\n" >> /tmp/backup.log

crontab -e

需要做一点微调:

代码语言:javascript
复制
# 每天凌晨2点10分, 跨机备份文件
10 02  * * * source ~/.bash_profile && echo -e "=== $(date '+\%Y-\%m-\%d \%H:\%M:\%S') start ===\n" >> /tmp/backup.log && cd /home/lukachen && rsync -chavzP --stats lukachen@192.168.1.1:/data/www/backup/* /home/lukachen/backup >> /tmp/backup.log 2>&1 && echo -e "=== $(date '+\%Y-\%m-\%d \%H:\%M:\%S') end ===\n" >> /tmp/backup.log

分解以上命令:

代码语言:javascript
复制
source ~/.bash_profile 

易出错点:环境变量不同

解决方法:用上述 source 命令,使用当前用户环境变量,包括 alias、用户登录终端会做的一些初始化操作(如果 ~/.bash_profile 做的事情过多,这个命令一定程度上降低效率)

代码语言:javascript
复制
echo -e "=== $(date '+\%Y-\%m-\%d \%H:\%M:\%S') start ===\n" >> /tmp/backup.log

易出错点:% 在 crontab 里是特殊字符

解决方法:对 % 加反斜线转义

代码语言:javascript
复制
rsync -chavzP --stats lukachen@139.x.x.x:/data/www/backup/* /home/lukachen/backup >> /tmp/backup.log 2>&1

简单解释一下命令中 rsync 和 2>&1:

  1. 使用 rsync 命令,将远程机器 /data/www/backup/* 下的文件备份到 /home/lukachen/backup。rsync 可以看 rsync 发布代码 文件备份
  2. 这里 rsync 不需要密码,需先将本机公钥放到 139.x.x.x 上了。这部分知识可以搜索 ssh-copy-id
  3. 2>&1 意思是,将错误输出也重定向到 /tmp/backup.log
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-06-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 终端内命令与 crontab 内命令对比
  • 分解以上命令:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档