crontab執行不生效-【問題篇】


背景:不知道什么原因腳本手動執行:正常;crontab執行不生效;
 
總結原因:
1.shell腳本中絕對路徑問題(尤其是生成文件路徑)
2.crontab的環境變量問題(尤其是命令調用路徑)
 
用下面的腳本解析以上兩個問題:
----------------------------------------------------------
[root@monitor2 scripts]# cat cron.sh
#!/bin/sh
# func : 遠程登錄MySQL執行SQL語句,返回結果導入日期結尾的文件,每分鍾執行一次腳本
user='admin'
pswd='admin'
host='10.10.60.108'
port=4001
MYSQL_CMD=" mysql -u${user} -p${pswd} -h${host} -P${port}"     # 遠程登錄命令,直接調用mysql命令。
SQL="SELECT VERSION();"
time_mark=`date '+%Y%m%f%H%M%S'`
#filedir="/data/scripts"     # 生成文件的絕對路徑
filename="version_${time_mark}.txt"     # 直接指定文件名字
${MYSQL_CMD} -e"${SQL}" >${filename}     # 直接寫入指定的文件中 取決於上面filename變量
--------------------------------------------------------
以上是腳本內容!!!
--------------------------------------------------------
計划任務:
*/1 * * * * /bin/sh /data/scripts/cron.sh
--------------------------------------------------------
 
解析問題:
【shell腳本中絕對路徑問題】
1.在腳本所在目錄下:/data/scripts/手動執行以上腳本(不是絕對路徑文件)
命令:./cron.sh
結果:正常生成文件
-rw-r--r--. 1 root root       26 Jan 10 12:13 version_20170110121326.txt
-rw-r--r--. 1 root root       26 Jan 10 12:13 version_20170110121344.txt
2.crontab執行腳本
觀察:
[root@monitor2 scripts]# tailf /var/log/cron
Jan 10 12:17:01 monitor2 CROND[524]: (root) CMD (/bin/sh /data/scripts/cron.sh)
結果:計划任務照常執行,但是不會生成文件
3.修改腳本,生成文件是絕對路徑
腳本:
filedir="/data/scripts"     # 生成文件的絕對路徑:開啟
filename=" ${filedir}/version_${time_mark}.txt"     # 直接指定文件名字:絕對路徑了
運行:手動執行,正常生成文件
運行:計划任務運行,正常生成文件
 
【crontab的環境變量問題】
1.腳本中:直接使用mysql命令
命令:手動執行腳本,正常輸出文件。因為:/etc/profile 中加入 了系統環境變量:/usr/local/mysql/bin/
2.crontab執行:如果想成功執行
分兩種情況:
     1.腳本中mysql命令指定絕對路徑:/usr/local/mysql/bin/mysql
     2.將mysql可執行文件復制到:crontab的環境變量指定的路徑中
 
------------------------------------------------------
# crontab的配置文件!!!
------------------------------------------------------
[root@monitor2 scripts]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin :/usr/bin     # 將mysql可執行文件復制到/usr/bin下,腳本中就可以直接使用mysql命令
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
-------------------------------------------------------------
 
!查看:cron的log日志文件:
  tailf /var/log/cron
 
!重啟crond服務:
  service crond restart
 
總結:
腳本中涉及文件和命令的使用最好都用上絕對路徑!!!
腳本中涉及文件和命令的使用最好都用上絕對路徑!!!
腳本中涉及文件和命令的使用最好都用上絕對路徑!!!

--------------------------------------------------------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM