我有一个在 debian 机器上运行的 cronjob。在脚本的某些点上,我通过
设置变量HOSTNAME=$( hostname -s | tr A-Z a-z )
然后,我将该值记录到系统日志(这样我就可以看到一切都在正常运行)
function log {
# just echo it
echo -n `date -u "+%s"`
echo -n " "
echo $1
/usr/bin/logger -t $0 -- $1
}
log "Hostname: ${HOSTNAME}"
但是,在这个盒子上,我收到了一个 SIGPIPE。这在整个脚本中多次发生。我已捕获 SIGPIPE 以确认情况确实如此,但我想实际解决该问题。
谁能告诉我可能导致 SIGPIPE 的原因,以及如何修复它?我试过创建一个较小的测试脚本,但该脚本的 react 方式不同。
最佳答案
我的猜测:在 cron 环境中,PATH 是有限的,这意味着 shell 可能无法找到 hostname 和/或 tr。首先,找出 hostname 和 tr 所在的位置,并使用绝对路径代替,例如:
HOSTNAME=$( /bin/hostname -s | /usr/bin/tr A-Z a-z )
关于linux - 在 bash 脚本中回显变量时的 SIGPIPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7584332/