【问题标题】:Shell script hanging when calling cat调用 cat 时挂起的 shell 脚本
【发布时间】:2021-06-08 23:53:23
【问题描述】:

我有一个 shell 脚本,它通过电子邮件向我发送通过 crontasks 遇到的错误,如下所示:

exec >&-;

output="$(cat)";

shopt -s nocasematch

if [[ "$output" == *"error"* || "$output" == *"warning"* ]]; then
    echo "$output" | mail -s "Error" my@email.com;
fi

exit 0;

我的 crontab 看起来像:

*/1 * * * * /opt/sh/email.sh /usr/bin/php /home/sites/website/app/console my:cli:command >> /var/log/cron.d/ my.cli.command/log 2>&1

脚本有效,但“猫”似乎挂了:

root 23083 0.0 0.0 139752 1112 ? S Mar20 0:00 \_ CROND
500 23091 0.0 0.0 106096 1016 ? Ss Mar20 0:00 | \_ /bin/sh -c /usr/bin/php /var/www/website/app/console my:cli:command 2>&1 | /usr/local/bin/email.sh
500 23096 0.0 0.3 463528 27292 ? S Mar20 0:35 | \_ /usr/bin/php /var/www/website/app/console my:cli:command
500 23097 0.0 0.0 106096 1048 ? S Mar20 0:00 | \_ /bin/bash /usr/local/bin/email.sh
500 23101 0.0 0.0 100936 496 ? S Mar20 0:00 | \_ cat
root 12167 0.0 0.0 139752 1276 ? S Mar22 0:00 \_ CROND
500 12183 0.0 0.0 106096 1104 ? Ss Mar22 0:00 | \_ /bin/sh -c /usr/bin/php /var/www/website/app/console my:cli:command 2>&1 | /usr/local/bin/email.sh
500 12185 0.0 0.4 463528 36612 ? S Mar22 0:32 | \_ /usr/bin/php /var/www/website/app/console my:cli:command
500 12186 0.0 0.0 106096 1104 ? S Mar22 0:00 | \_ /bin/bash /usr/local/bin/email.sh
500 12194 0.0 0.0 100936 516 ? S Mar22 0:00 | \_ cat
root 1675 0.0 0.0 139752 1128 ? S Mar25 0:00 \_ CROND

有什么想法吗?

【问题讨论】:

    标签: shell cron


    【解决方案1】:

    它挂起是因为你没有给 cat 任何输入来连接,所以它只会永远听 STDIN。

    来自手册页:

    cat 实用程序按顺序读取文件,并将它们写入标准输出。文件操作数按命令行顺序处理。如果 file 是单个破折号 (`-') 或不存在,则 cat 从标准输入读取。如果 file 是 UNIX 域套接字,则 cat 连接到它,然后读取它直到 EOF。这补充了 inetd(8) 中可用的 UNIX 域绑定功能。

    【讨论】:

    • 好的,有道理。您有建议的解决方案吗?
    • @bjohnson, ...好吧,您希望脚本做什么?我们必须知道 $(cat) 的目的是什么,才能告诉您如何实现该目的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 2020-09-15
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多