crontab 中有一个计划的脚本。
0 2 * * * /usr/local/bin/backup.sh >> /root/output_all.txt
我想同时将输出保存到多个文件中,例如output_all.txt和output_date.txt。
我知道有tee
命令将输出保存到多个文件。
但tee
只有tty存在时才能使用?
还有其他解决办法吗?
答案1
使用tee
作品没有任何问题。tty
只是用于与操作系统交互的设备,位于/dev/tty#
。
0 2 * * * /usr/local/bin/backup.sh | tee /root/output_all.txt output_date.txt
如果您希望它将输出附加到文件并且不覆盖现有内容:
0 2 * * * /usr/local/bin/backup.sh | tee -a /root/output_all.txt output_date.txt
请记住,上述方法将发送到 stdout 和文件,并向 cron 用户发送电子邮件。
答案2
该过程通常不知道它是通过 cron 会话运行还是通过终端连接会话运行,因此您的问题应该只是:“将输出保存到多个文件”,它实际上是更简单的方面:用于tee
将标准输出分叉到一个或更多文件,不要忘记剩余的输出sendmail
默认情况下会转到。如果您不希望非托管邮箱不断增长,请考虑使用管道,这是一个懒惰的选项,比根据您喜欢的语法设置后|& logger
消失更好。&>/dev/null
SHELL=/bin/bash
这让我们回到了您所犯的错误:仅缺少 cron 启动的进程stdin
(例如,它存在但无效/dev/null
),$DISPLAY
以及您直观地理解为参与用户界面的其他桌面特定资源,包括需要活动用户的加密代理会议 ;尝试只安排不需要用户交互的任务。
说真的,对于 cronjobs,值得配置邮件路由,因为所有剩余的输出都会路由到邮件而不是终端。就这样。