2017-09-14 86 views
1

ack在linux中不使用crontab输出。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后,有1.T 2.T并在/ext

cat 2.t将输出/usr/bin/ack; 但是,没有在1.t

如果我运行在bash ack "localhost" /etc/hosts > /ext/3.t(30年4月3日)或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的下运行

+0

不起作用。谢谢。 @Inian –

+0

做'哪个ack',然后把这个值用在你的脚本里面。也就是说,在脚本中使用'/ full/path/to/ack'。否则,将该值添加到PATH变量。我们每天都会问这类问题,请学习使用搜索功能。祝你好运。 – shellter

+0

@shellter,它不起作用。你的答案和Inian的一样。谢谢。 “ –

回答

1

确认可能是抛出一个错误,但因为你是唯一的管道你没有看到stdout和错误被写入std err。

作为一条经验法则,除非你有充分的理由不要在cron日志中抓取stderr。

重定向与命令流:

[stream-no]>[destination] 

如果没有流没有给出bash将默认为1对应于标准输出,所以:

>/file == 1>/file 

您可以通过使用标准错误做标准错误file-no,2.发送stderr到文件:

2>/file 

您可以通过使用发送流到另一个& file-no作为目的地。您可以将stderr发送到stdout与之相同的地方:

2>&1 

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

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

并检查输出。我敢打赌,你现在得到一些文本,很可能是一个你不能明智地修复的错误。

+0

使用'/ usr/bin/ack“localhost”/ etc/hosts 2>&1>/ext/1.t'不会改变任何内容。谢谢。你在你的Linux中测试过吗?顺便说一句,如果有错误,cron会发送一封邮件。但是,没有收到任何电子邮件。 –

+0

是不是'...> log 2>&1'通常的表述?它曾经有所作为;-)。否则,非常耐心解释流重定向!祝你们好运。 – shellter

+0

不起作用,仍然@shelter。确切地说,流重定向被清楚地解释。谢谢。 –

相关问题