ack 在 linux 中使用 crontab 不输出任何内容
ack outputs nothing using crontab in linux
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
.
中没有任何内容
如果我运行 ack "localhost" /etc/hosts > /ext/3.t
in bash (4.3.30) 或者直接sh,
它将输出: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,运行 在 Perl 5.20.2 下 /usr/bin/perl
Ack 可能会抛出一个错误,但您没有看到,因为您只是通过管道传输 stdout 并且错误被写入 std err。
根据经验,除非有充分的理由不这样做,否则请始终在 cron 日志中获取 stderr。
使用以下命令重定向流:
[stream-no]>[destination]
如果没有给出流号 bash 将默认为 1,对应于 stdout 所以:
>/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
并检查输出。我打赌你现在收到了一些文本,很可能是一个你无法智能修复的错误。
/usr/bin/ack --nofilter "localhost" /etc/hosts > /ext/1.t
有效。
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
cat 2.t
会输出/usr/bin/ack
;
但是,1.t
.
如果我运行 ack "localhost" /etc/hosts > /ext/3.t
in bash (4.3.30) 或者直接sh,
它将输出: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,运行 在 Perl 5.20.2 下 /usr/bin/perl
Ack 可能会抛出一个错误,但您没有看到,因为您只是通过管道传输 stdout 并且错误被写入 std err。
根据经验,除非有充分的理由不这样做,否则请始终在 cron 日志中获取 stderr。
使用以下命令重定向流:
[stream-no]>[destination]
如果没有给出流号 bash 将默认为 1,对应于 stdout 所以:
>/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
并检查输出。我打赌你现在收到了一些文本,很可能是一个你无法智能修复的错误。
/usr/bin/ack --nofilter "localhost" /etc/hosts > /ext/1.t
有效。