linux - crontab注意变量问题

陈星的技术学习 2019-10-31

简介

在Linux上定时任务都是使用crontab进行运行的。但是在执行任务的时候如果没有设置好,就会导致任务失败。

linux - crontab注意变量问题


变量问题

crontab在执行的时候是不加载/etc/profile里面变量的,默认加载的是/etc/crontab这个文件的环境变量。

因此如果需要加载/etc/profiles里面的变量,需要先source /etc/profile

linux - crontab注意变量问题


例如

00 00 * * * mysqldump -uroot -prootpassword mydb > /data/backup/backupfile$(date +%Y%m%d%H%M).sql

加载变量:

00 00 * * * source /etc/profiles ; mysqldump -uroot -prootpassword mydb > /data/backup/backupfile$(date +%Y%m%d%H%M).sql

但是这样子,命令在终端是可以执行,但是crontab运行的时候就会报错,运行不了。这个是因为“%”引起的,第一个%会被认为是标准输入的开始,接下来的%都会被认为是换行。

更正:

00 00 * * * source /etc/profiles ; mysqldump -uroot -prootpassword mydb > /data/backup/backupfile$(date +\%Y\%m\%d\%H\%M).sql

反转译一下就可以正常运行。


总结

这样子crontab任务写了一长串,感觉很乱,而且还一不小心就写错了。因此,建议写成脚本然后crontab设置执行脚本的任务即可。

vim /data/sh/backupsql.sh

#!/bin/bash
source /etc/profiles
mysqldump -uroot -prootpassword mydb > /data/backup/backupfile$(date +%Y%m%d%H%M).sql

crontab -e

00 00 * * * /bin/bash /data/sh/backupsql.sh >> /tmp/backupsql.log 2>&1

linux - crontab注意变量问题

相关推荐