Crontab中的Shell脚本无法正常工作

时间:2014-05-19 04:01:37

标签: sh crontab

我将工作添加到crontab

20 2 * * * sh /home/tomcat/bin/test3.sh
20 2 * * * sh /home/tomcat/bin/test.sh

我检查了权限..

-rwxr-xr-x  1 root root      58 May 19 02:04 test3.sh
-rwxr-xr-x  1 root root    3223 May 16 08:20 test.sh

test3.sh正在使用命令行和crontab

#!/bin/sh


echo "test test test..." > /test3_sh.txt

但是test.sh无效crontab。代码似乎有点复杂和混乱,但目的很简单。它从MYSQL检索数据并通过sendmail发送邮件。当我从命令行运行test.sh时它正在运行,但是从crontab它没有。

#!/bin/sh


results=`mysql -N -h mysqlhost.com -u user -pmypassword -e "USE MYDB;
SELECT
    column1,
    column2,
    column3,
    column4

FROM MYTABLE 
    ORDER BY REG_DT DESC 
    LIMIT 10;"`

IFS=$'
'

x="<style type="text/css">
table.gridtable {
    font-family: verdana,arial,sans-serif;
    font-size:11px;
    color:#333333;
    border-width: 1px;
    border-color: #666666;
    border-collapse: collapse;
}
table.gridtable th {
    border-width: 1px;
    padding: 8px;
    border-style: solid;
    border-color: #666666;
    background-color: #dedede;
}
table.gridtable td {
    border-width: 1px;
    padding: 8px;
    border-style: solid;
    border-color: #666666;
    background-color: #ffffff;
}
</style><table class="gridtable">
    <tr>
        <th>column 1</th><th>column 2</th><th>column 3</th><th>column 4</th>
    </tr>"
for i in $results; 
do
 x+="<tr>"
 x+="$i
"
 x+="</tr>"
done

x+="</table>"




cat - /home/tomcat/bin/test.log << EOF | sendmail -t -f test@test.com
to:test@test.com
from:test@test.com
subject:test mail
Mime-Version: 1.0
Content-Type: text/html

<html>
<body>
<h3>my recent articles..</h3>
$x
<br><hr>
</body>
</html>
EOF

我用Google搜索了这个问题,有些人说,有些pahts和ENV变量与命令行和crontab的工作方式不同。但是我的sh中没有像ENV变量那样的东西。 我的sh中有一条日志路径。这有点可疑,但我不确定这可能是个问题。

cat - /home/tomcat/bin/test.log << EOF | sendmail -t -f test@test.com

3 个答案:

答案 0 :(得分:1)

您还可以导航到路径并将脚本作为&gt;&gt;

运行

20 2 * * * cd / home / tomcat / bin /&amp;&amp; sh test3.sh

它会起作用

答案 1 :(得分:0)

只需从命令开头删除sh

20 2 * * * /home/tomcat/bin/test3.sh
20 2 * * * /home/tomcat/bin/test.sh

答案 2 :(得分:0)

这是一条路。我将此路径添加到crontab并且运行良好!

# path
SHELL=/bin/bash
PATH=/usr/local/bin/:/sbin:/bin:/usr/sbin:/usr/bin
LANG=en_US.UTF-8