将STDERR发送到记录器

Gnu*_*utt 6 bash logging stream

我正在编写一个bash脚本来执行异地备份,使用SSH上的rsync.我可以将STDOUT发送到记录器,用于记录日志

rsync --del -az -e 'ssh -i mycrt.crt' /home/gnutt/backup/ me@offisite:backup | logger -i
Run Code Online (Sandbox Code Playgroud)

但是我想要发送STDERR,所以如果出现问题,例如异地不可用,则应将该输出发送到记录器并记录.

Dav*_*har 6

您可以通过添加将STDERR描述符(2)重定向到STDOUT(1)2>&1,例如:

rsync --del -az -e 'ssh -i mycrt.crt' /home/gnutt/backup/ me@offisite:backup  2>&1 | logger -i
Run Code Online (Sandbox Code Playgroud)


Pat*_*hie 6

如果你想要stderr而不是stdout(而不是stderr和stdout),你可以执行以下操作:

  1. 打开另一个文件描述符(9)
  2. 将stdout(1)重定向到新文件描述符(9)
  3. 将stderr(2)重定向到stdout(1)

看起来像这样:

rsync --del -az -e 'ssh -i mycrt.crt' /home/gnutt/backup/ me@offisite:backup 9> /dev/null 1>&9 2>&1 | logger -i
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用流程替换:

logger -i <( rsync --del -az -e 'ssh -i mycrt.crt' /home/gnutt/backup/ me@offisite:backup > /dev/null )
Run Code Online (Sandbox Code Playgroud)