微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Shell脚本从命令行运行,而不是cron

如何解决Shell脚本从命令行运行,而不是cron

| 我有一个脚本,每天更新一次具有某些统计信息的服务器。从命令行运行时,脚本按预期工作,但从cron运行时,某些变量未传递给curl。 这是代码示例:
#!/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin
/bin/sh /etc/profile

MACADDR=$(ifconfig en0 | grep ether | awk \'{print $2}\')
disKUSED=$(df / | awk \'{print $3}\' | tail -n1)
disKSIZE=$(df / | awk \'{print $2}\' | tail -n1)

# HTTP GET ParaMS
GET_DELIM=\"&\"
GET_MAC=\"macaddr\"
GET_DS=\"disk_size\"
GET_DU=\"disk_used\"

# Put together the query
QUERY1=$GET_MAC=$MACADDR$GET_DELIM$GET_DS=$disKSIZE$GET_DELIM$GET_DU=$disK_USED

curl http://192.168.100.150/status.PHP?$QUERY1
cron作业的结果是http://192.168.100.150/status.PHP?macaddr=&disk_size=&disk_used= 我不确定变量是否存在问题,或者awk尝试解析未指定终端大小的数据等问题。 任何帮助表示赞赏。     

解决方法

当您遇到此类问题时,几乎总是环境问题。 将“ env”的结果转储到文件中并进行检查。您也可以使用
#!/bin/sh -x
看看所有变量发生了什么。您可能要使用包装器脚本,以便可以重定向为分析提供的输出。     ,在脚本
ifconfig
中的第一个命令在Mac的
/sbin/ifconfig
中找到。 cron作业的默认PATH变量设置为:
/usr/bin:/bin
,这就是其余命令可能也失败的原因。 最好在脚本顶部手动设置PATH。就像是:
export PATH=$PATH:/sbin
    ,我在使用权杖时遇到的一个问题是,您认为理所当然的变量不存在。您理所当然的主要是路径变量。 从命令行运行时,回显您设置为路径的内容,并将其放在脚本顶部(或crontab顶部)。 或者,指定每个命令的完整路径-ifconfig,awk,grep等。 我猜这将解决问题。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。