在控制台上输出Cron作业

我写了一个shell脚本( myscript.sh ):

#!/bin/sh
ls
pwd

我想每分钟安排一次这项工作,它应该显示在控制台上。为了做到这一点,我做了 crontab -e

*/1 * * * * /root/myscript.sh

在这里,它将输出显示在/var/mail/root 文件中,而不是在控制台上打印。

为了在控制台上打印输出,我必须做些什么改变?

0
额外 编辑
意见: 1

2 答案

我能想到的最简单的方法是将输出记录到磁盘,并有一个控制台窗口不断检查日志文件是否已被更改并打印更改。

crontab中:

*/1 * * * * /root/myscript.sh | tee -a /path/to/logfile.log

在控制台中:

tail -F /path/to/logfile.log

问题在于你会得到一个不断增长的日志文件,需要定期删除。

为了避免这种情况,您必须做一些更复杂的事情,从而确定您希望写入的控制台pid并将其存储在预定义的位置。

控制台脚本:

#!/usr/bin/env bash

# register.sh script    
# prints parent pid to special file

echo $PPID > /path/to/predfined_location.txt

crontab的包装脚本

#!/usr/bin/env bash

cmd=$1
remote_pid_location=$2

# Read the contents of the file into $remote_pid.
# Hopefully the contents will be the pid of the process that wants the output 
# of the command to be run.
read remote_pid < $remote_pid_location

# if the process still exists and has an open stdin file descriptor
if stat /proc/$remote_pid/fd/0 &>/dev/null
then
    # then run the command echoing it's output to stdout and to the
    # stdin of the remote process
    $cmd | tee /proc/$remote_pid/fd/0 
else
    # otherwise just run the command as normal
    $cmd
fi

crontab用法:

*/1 * * * * /root/wrapper_script.sh /root/myscript.sh /path/to/predefined_location.txt

现在,您只需在要将程序打印到的控制台中运行 register.sh 即可。

0
额外
我们能否在屏幕上每分钟后定期打印输出,而不是重定向到文件中?
额外 作者 Sasikiran Vaddi,
我遵循了你提到的同样的程序。但它提供的信息如/ bin/sh:/root/crontest/wrapper.sh:在/ var/mail/root中拒绝了权限。我无法理解它为什么给出这个。
额外 作者 Sasikiran Vaddi,
我已经给了执行权限,并试图执行register.sh它显示在/ var/mail/root像这样/root/crontest/wrapper.sh:第6行:/root/crontest/register.txt:没有这样的文件或目录,并显示“ls,pwd”的输出其实我有一个疑问,是我必须将myscript.sh放在console.sh中,在那里你注释了像#register.sh
额外 作者 Sasikiran Vaddi,
我认为它会自动创建,所以我没有创建文件register.txt现在,我创建了文件register.txt。但现在当我运行register.sh它显示“命令未找到”,但输出重定向到文件/ var/mail/root每隔一分钟。
额外 作者 Sasikiran Vaddi,
所以你想基本上捕捉整个输出,然后突然打印你的控制台一次?你有没有尝试第二个不重定向到文件的解决方案?
额外 作者 Dunes,
主要是因为你没有给予wrapper.sh执行权限
额外 作者 Dunes,
包装脚本抱怨register.txt不存在。它存在吗?你有没有运行register.sh?
额外 作者 Dunes,

我尝试将cron作业的输出实现到gnome终端,并通过它进行管理

*/1 * * * * /root/myscript.sh > /dev/pts/0

我想如果你没有GUI,而你只有CLI,你可以使用

*/1 * * * * /root/myscript.sh > /dev/tty1

实现将crontab作业重定向到控制台的输出。

0
额外