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'
我试图让一个由 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'