Cronned Django 命令输出未在 bash 脚本的 tee 中发布

Cronned Django command output not posted in tee from bash script

我试图让一个由 cron 控制的 bash 脚本每天成为 运行 我想从 python 中获取一些行(Django) 输出和 post 它与 slacktee 到我的松弛频道。但是我只是从脚本中捕获了一些警告,而不是我自己的打印(与 std::out 和 std::err 有关)?但我似乎无法调试它。

#!/bin/bash

printf "\nStarting the products update command\n"
DATE=`date +%Y-%m-%d`
source mypath/bin/activate

cd some/path/_production/_server

./manage.py nn_products_update > logs/product_updates.log

tail --lines=1000 logs/product_updates.log | grep INFO | grep $DATE

所以对于每一天,我都在尝试 grep 像这样的消息:

[INFO][NEURAL_RECO_UPDATE][2017-08-28 22:15:04] Products update...

但它不会打印在发球台通道中。此外,该文件每天都会被覆盖而不是附加 - 请问如何更改?当 shell 中的 运行 本身时,tail 命令工作正常。这怎么可能? (很抱歉问了两个,但我相信它们有某种关联,只是找不到答案)

这是为了以防万一 cron 条目。

20 20 * * * /bin/bash /path/to/server/_production/bin/runReco.sh 2>&1 | slacktee.sh -c 'my_watch'

非常感谢

编辑:

使用grep -e INFO -e $DATE

时的输出
grep: [INFO][NEURAL_RECO_UPDATE][2017-08-29: No such file or directory
grep: 07:36:56]: No such file or directory
grep: No: No such file or directory
grep: new: No such file or directory
grep: active: No such file or directory
grep: products: No such file or directory
grep: to: No such file or directory
grep: calculate.: No such file or directory
grep: Terminating...: No such file or directory

使用:

#!/bin/bash
set -euo pipefile

这将为您的脚本提供更好的调试输出 有关设置的完整说明,请参阅 bash strict mode article

文件被覆盖,因为您使用的是单个 >(重定向)而不是 >> 附加重定向输出。

为了帮助进一步调试,如果你把

2>&1 | slacktee.sh -c 'my_watch'

在您的 runReco.sh 中:

tail --lines=1000 logs/product_updates.log | grep INFO | grep $DATE 2>&1 | slacktee.sh -c 'my_watch'

尽管在 shell 脚本中将大量命令链接在一起会使它们更难调试。

因此打破尾线:

TMPFILE=`tail --lines=1000 logs/product_updates.log`
grep -e INFO -e $DATE $TMPFILE 2>&1 | slacktee.sh -c 'my_watch'