linux log 写入

$command  2>&1|tee log/$job_name-$now.log &

$command 表示要跑的命令,比如 python train.py
2>&1 参考
https://www.runoob.com/linux/linux-shell-io-redirections.html
https://www.jb51.net/article/169778.htm
其中 2 表示标准错误输出; 1 表示标准输出;>& 将两侧的标准输出合并;| 管道,将 |前面的输送到 | 后面

tee 命令
从标准输入中复制到每一个文件,并输出到标准输出。
也就是说 tee命令将管道送来的输入 一方面输出到标准输出屏幕,一方面输出到后面的文件 log/log/$job_name-$now.log
最后面的 & 表示将这个任务放到后台执行,这个命名可以用于大文件复制终端卡死的情况,这样就能放到后台复制,就可以立即继续在同一个终端上工作了,甚至关闭终端也不影响这个任务的正常执行。
参考: https://linux.cn/article-10587-1.html?pr

这样就可以将 标准错误输出 和 标准输出 都进行记录,而普通的记录log的方法在程序运行正常时是能记录的,但是当程序报错时出错的原因则不能记录

原文地址:https://www.cnblogs.com/qiulinzhang/p/14335973.html