我编写了一个shell脚本(myscript.sh
):
#!/bin/sh
ls
pwd
我想每分钟安排一次这个工作,它应该显示在控制台上。为了做到这一点,我做了crontab -e
:
*/1 * * * * /root/myscript.sh
这里,它显示文件/var/mail/root
中的输出,而不是在控制台上打印。
为了在控制台上打印输出,我必须做些什么改变?
答案 0 :(得分:4)
我能想到的最简单的方法是将输出记录到磁盘并且不断检查控制台窗口以查看日志文件是否已被更改并打印更改。
的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
即可。
答案 1 :(得分:1)
我试图将一个cron作业的输出实现到一个gnome终端,并由此来管理它
*/1 * * * * /root/myscript.sh > /dev/pts/0
我想如果你没有GUI而你只有CLI,你可以使用
*/1 * * * * /root/myscript.sh > /dev/tty1
实现将crontab作业的输出重定向到您的控制台。