Max Asked: 2009-07-20 23:10:39 +0800 CST2009-07-20 23:10:39 +0800 CST 2009-07-20 23:10:39 +0800 CST 将 Cronjob 输出重定向到正在运行的屏幕会话? 772 是否可以启动屏幕会话、设置 cronjob 并将 cronjob 的输出重定向到屏幕会话?跟随程序的输出会很棒;-) 问候.... cron gnu-screen 4 个回答 Voted Best Answer user1686 2009-07-20T23:26:44+08:002009-07-20T23:26:44+08:00 您可以使用该tty屏幕中的命令找到它的 tty 的路径(应该类似于/dev/pts/12),然后在 crontab 中将所有输出重定向到该路径,就好像它是一个文件一样。 像这样: 1 2 3 4 5 myapp &> /dev/pts/14 radius 2009-07-20T23:56:18+08:002009-07-20T23:56:18+08:00 grawity 提供了一个很好的方法来做到这一点,但问题是每次重新启动屏幕/服务器时,tty 都会改变。 你可以对 write(1) 命令做一个管道,比如| write user. 这将向用户“用户”发送一条消息,您只需要在屏幕中打开一个用户该用户的窗口即可查看输出,但write会在标准输出值之前添加一些消息。 womble 2009-07-20T23:59:33+08:002009-07-20T23:59:33+08:00 为什么不直接在 cronjob 中启动屏幕,然后启动您想要在其中运行的任何内容? screen -d -m <command to run>应该做的伎俩。 cas 2009-07-21T00:05:06+08:002009-07-21T00:05:06+08:00 正如radius所提到的,没有确切的方法知道您的屏幕会话将在任何给定时刻使用哪个或哪些tty......甚至可能在屏幕中打开的许多伪tty中的哪一个是您真正想要的输出发送到。 您最好的选择是将 cron 作业的输出(包括 stdout 和 stderr)重定向到一个文件,然后从屏幕内对其运行“tail -f”或“tail -F”。这为您提供了一个永久的日志文件以及实时观看它的能力。 或者,根本不重定向输出,只需等待作业完成 - 然后所有输出将邮寄给作业的所有者。
您可以使用该
tty
屏幕中的命令找到它的 tty 的路径(应该类似于/dev/pts/12
),然后在 crontab 中将所有输出重定向到该路径,就好像它是一个文件一样。像这样:
grawity 提供了一个很好的方法来做到这一点,但问题是每次重新启动屏幕/服务器时,tty 都会改变。
你可以对 write(1) 命令做一个管道,比如
| write user
. 这将向用户“用户”发送一条消息,您只需要在屏幕中打开一个用户该用户的窗口即可查看输出,但write
会在标准输出值之前添加一些消息。为什么不直接在 cronjob 中启动屏幕,然后启动您想要在其中运行的任何内容?
screen -d -m <command to run>
应该做的伎俩。正如radius所提到的,没有确切的方法知道您的屏幕会话将在任何给定时刻使用哪个或哪些tty......甚至可能在屏幕中打开的许多伪tty中的哪一个是您真正想要的输出发送到。
您最好的选择是将 cron 作业的输出(包括 stdout 和 stderr)重定向到一个文件,然后从屏幕内对其运行“tail -f”或“tail -F”。这为您提供了一个永久的日志文件以及实时观看它的能力。
或者,根本不重定向输出,只需等待作业完成 - 然后所有输出将邮寄给作业的所有者。