说明
在 Linux 中,经常会使用定时任务,定时执行指定的脚本或二进制程序文件。但是发现有时候 crontab 在执行的时候,总是提示找不到命令。但是手动执行的时候,却没有该问题。
crontab 定时任务的执行日志,可以在 /var/log/ 目录中找到。
分析
出现上面的问题,其实就是环境变量不一样的问题。crontab 执行时的环境变量与手动执行时的环境变量不一样。
解决方法
使用一个脚本包装环境变量,同时在该脚本内调用要执行的二进制程序文件。
定义 runBinaryFile.sh 文件,用于包装环境变量。
#!/bin/bash
#### Environments ####
. ~/.bash_profile
. /etc/profile
######################
# 下面是要执行的脚本文件,以及参数
/Softwares/theTool -a -b -c
定时执行的时候,就执行 runBinaryFile.sh 脚本文件即可 。
总结
- 写 shell 脚本的时候,一定要注意文件开头要有
#!/bin/bash
- 对于 crontab 无法执行的二进制文件,使用一个包装的 shell 脚本执行。
定义 runBinaryFile.sh 文件,用于包装环境变量。
#!/bin/bash
#### Environments ####
. ~/.bash_profile
. /etc/profile
######################
# 下面是要执行的脚本文件,以及参数
/Softwares/theTool -a -b -c
- 要执行的脚本一定要有执行权限。
例如:要执行的脚本名称为:myShell.sh
chmod 777 myShell.sh