gpt4 book ai didi

linux - ack在linux中使用crontab什么都不输出

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:02 24 4
gpt4 key购买 nike

ack 在 linux 中使用 crontab 不输出任何内容。

在 crontab 文件中(使用 sudo crontab -e 编辑):

39 20 * * * /ext/test110.sh

cat/ext/test110.sh 将显示

#! /bin/sh

/usr/bin/ack "localhost" /etc/hosts > /ext/1.t
which ack > /ext/2.t

cron之后/ext中有1.t和2.t

cat 2.t 会输出/usr/bin/ack;但是,1.t 中没有任何内容。

如果我在 bash (4.3.30) 或 sh 中直接运行 ack "localhost"/etc/hosts >/ext/3.t,它将输出:127.0.0.1 localhost

好像ack不能与 cron 一起工作。错误在哪里?谢谢。

uname -a:

Linux xxx 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt25-2 (2016-04-08) x86_64 GNU/Linux

ack 2.14,在/usr/bin/perl 的 Perl 5.20.2 下运行

最佳答案

Ack 可能会抛出一个错误,但您没有看到,因为您只是通过管道传输 stdout 并且错误被写入 std err。

根据经验,除非您有充分的理由不这样做,否则请始终在 cron 日志中获取 stderr。

使用以下命令重定向流:

 [stream-no]>[destination]

如果没有给出流编号,bash 将默认为 1,对应于标准输出,因此:

>/file == 1>/file

您可以使用 stderr 文件执行 stderr-no,2. 将 stderr 发送到文件:

2>/file 

您可以使用 &file-no 作为目标将一个流发送到另一个流。您可以将 stderr 发送到与 stdout 相同的位置:

2>&1

所以在你的脚本中试试这个。运行 ack,将 stderr 与 stdout 一起发送到 file-no 1,然后将进入 file-no 1 的所有内容发送到日志文件中。

/usr/bin/ack "localhost" /etc/hosts 2>&1 > /ext/1.t 

并检查输出。我敢打赌你现在收到了一些文本,很可能是一个你无法智能修复的错误。

关于linux - ack在linux中使用crontab什么都不输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46219703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com