简介
在Linux上定时任务都是使用crontab进行运行的。但是在执行任务的时候如果没有设置好,就会导致任务失败。
![72eca8640ffcc0a452fb3ca74febd0ca.png](https://i-blog.csdnimg.cn/blog_migrate/3f75f724f4343fc3d1d8140e2ab009df.jpeg)
变量问题
crontab在执行的时候是不加载/etc/profile里面变量的,默认加载的是/etc/crontab这个文件的环境变量。
因此如果需要加载/etc/profiles里面的变量,需要先source /etc/profile
![4b6e5053c335c8fed579ac7774ecca51.png](https://i-blog.csdnimg.cn/blog_migrate/98e34a700273247c15422ee77d587d7f.jpeg)
例如
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/bashsource /etc/profilesmysqldump -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
![e00f40474001e78865191ff7fbf74d13.png](https://i-blog.csdnimg.cn/blog_migrate/4cc9b7c698ca22d762111bb2805c49fd.jpeg)