我已经设置了一个incrontab规则,以对正在添加到ubuntu框上特定目录的文件做出反应,并运行脚本。效果很好,但是我的目标是将脚本的输出打印到文件中。
我尝试了几种不同的方法来解决它,到目前为止,使它正常工作的唯一方法是采用incrontab创建的生成命令,然后自己运行它。因此,我的想法是有可能,我可能只是缺少经验丰富的Linux用户显而易见的东西。
为了简洁起见,我缩短了一些命令。 “ watchdir”,“ scriptPath”和“ arg1”都是路径。我在脚本中引入了两个参数arg1和cron作业中的文件名通配符。
我尝试过: (它们运行脚本,但不输出到文件)
watchdir IN_CREATE scriptPath arg1 $#>> / home / ubuntu / logs / log-$#2>&1
watchdir IN_CREATE scriptPath arg1 $#&>> / home / ubuntu / logs / log-$#
(这些都不做)
watchdir IN_CREATE / bin / bash脚本路径arg1 $#>> / home / ubuntu / log / log-$#2>&1
watchdir IN_CREATE / bin / bash scriptPath arg1 $#&>> / home / ubuntu / log / log-$#
如果我运行'tail / var / log / syslog'并抓取下面的incrontab生成的命令并将其粘贴到外壳中,它将正常工作
watchdir IN_CREATE scriptPath arg1 $#&>> / home / ubuntu / logs / log-$#
这有效
scriptPath arg1任务-LHPUQ7ezcF0s0UwVgUR.txt&>> /home/ubuntu/logs/log-mission-LHPUQ7ezcF0s0UwVgUR.txt
对我可能会缺少的东西有何见解?
答案 0 :(得分:0)
我有一个类似的问题,发现incron
只是忽略了输出重定向并将它们作为参数传递给脚本:
https://askubuntu.com/questions/1164166/incrond-does-not-execute-custom-script
因此,您的解决方案可能是首先调用包装器脚本,该脚本将输出重定向到日志文件。
答案 1 :(得分:0)
如果您观看目录,则$@
保留目录路径,而$#
保留触发事件的文件。如果您观看文件,则$@
将保留文件的完整路径,而$#
为空。 Reference。
答案 2 :(得分:-3)
crontab默认shell sh的问题。 通过在crontab -e文件中添加SHELL = / bin / bash来更改默认Shell,或者使用crontab而不是应用程序中的输出重定向。
每10分钟crontab -e:
SHELL=/bin/bash
*/10 * * * * <full_path to shell script or other executable binary>
或
*/10 * * * * <full_path to shell script or other executable binary> >> <full path to log file> 2>&1
为了更加清晰,请从cron运行一次以下命令以查看当前环境并根据您的应用程序要求更改任何变量。
* * * * * env >> <full path>/env.txt