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

标签 bash 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

查看所有变量发生了什么。您可能想要使用包装器脚本,以便重定向它提供的输出以供分析。

关于bash - Shell 脚本从命令行运行,而不是 cron,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6141708/

相关文章:

java - 创建 bash 命令 java

linux - bash: ./script.sh: 参数列表太长

mysql - 从mysql数据库检索数据以创建新用户

Cronjob 和 Mavericks sleep 模式

linux - 计算日期差异时预期的整数表达式

通过 shell 脚本的 MySQLDump 没有被执行,为什么?

shell - Makefile 中的 for 循环无效

linux - 如何连接仅在同一天生成的 linux/unix 目录中的文件?

bash - Linux屏幕命令自动化

php - 如何在一定时间后采取行动(因用户而异)?