如何将 cron stderr 发送到管道之间的脚本?
How do I send cron stderr to a script between pipes?
我有一些 MySQL 数据库,我每晚从 cron 备份,只是你的标准 mysqldump
命令。我只想将来自 mysqldump and/or aws 的错误提供给一个脚本,然后该脚本会将错误发送到 slack。不过,我正在努力弄清楚如何在命令中间执行此操作。我想将 stderr 发送到 slacktee,但要发送到 gzip 并继续发送到 aws s3 cp
。所以这很好用:
* * * * * mysqldump --host=mysql.example.com --user=mysql | gzip | aws s3 cp - s3://backs/backs/whatever.sql.gz
这只是通常的普通 ol' 备份。但是我试图在 stderr 重定向中压缩 mysqldump 命令失败,我已经尝试了 2>&1
的所有组合,但每个组合都没有成功。每个组合要么以空 gzip 文件结尾,要么停止 运行.
中的所有内容
* * * * * mysqldump --host=mysql.example.com --user=mysql dbname 2>&1 >/dev/null | /usr/local/bin/slacktee | gzip | aws s3 cp - s3://backs/backs/whatever.sql.gz
因此,如果 mysqldump 命令出现错误,则仅将错误发送至 /usr/local/bin/slacktee
如果没有错误,则仅将 mysqldump 输出发送至 gzip 管道。
我想要和 aws s3 cp
一样的东西,但这似乎更容易,我可以把重定向放在最后。
编辑添加:理想情况下,我希望避免为此编写一个单独的脚本并将其全部保存在 cron 中的一行中。
同时添加另一个编辑。 2>&1 /dev/null
只是在这个例子中,我尝试在不同的地方制作 2>&1 /path/to/slacktee
以及 2>
和 1>
的不同组合以及一些 |
好吧,还有我能想到的所有其他不同方法,但那也行不通。
我会创建一个单独的脚本,(mysqlbackup.sh),并将 crontab 更改为:
* * * * * mysqlbackup.sh
您的脚本可能看起来像(未经测试):
#!/bin/bash
mysqldump --host=mysql.example.com --user=mysql dbname 2>/tmp/errors | gzip > /tmp/mysqldump.gz
if [ -s /tmp/errors ]; # if file has a size
then
echo "Something went wrong"
else
echo "OK"
fi
这当然需要用 aws s3 cp...
内容进行扩展...
我有一些 MySQL 数据库,我每晚从 cron 备份,只是你的标准 mysqldump
命令。我只想将来自 mysqldump and/or aws 的错误提供给一个脚本,然后该脚本会将错误发送到 slack。不过,我正在努力弄清楚如何在命令中间执行此操作。我想将 stderr 发送到 slacktee,但要发送到 gzip 并继续发送到 aws s3 cp
。所以这很好用:
* * * * * mysqldump --host=mysql.example.com --user=mysql | gzip | aws s3 cp - s3://backs/backs/whatever.sql.gz
这只是通常的普通 ol' 备份。但是我试图在 stderr 重定向中压缩 mysqldump 命令失败,我已经尝试了 2>&1
的所有组合,但每个组合都没有成功。每个组合要么以空 gzip 文件结尾,要么停止 运行.
* * * * * mysqldump --host=mysql.example.com --user=mysql dbname 2>&1 >/dev/null | /usr/local/bin/slacktee | gzip | aws s3 cp - s3://backs/backs/whatever.sql.gz
因此,如果 mysqldump 命令出现错误,则仅将错误发送至 /usr/local/bin/slacktee
如果没有错误,则仅将 mysqldump 输出发送至 gzip 管道。
我想要和 aws s3 cp
一样的东西,但这似乎更容易,我可以把重定向放在最后。
编辑添加:理想情况下,我希望避免为此编写一个单独的脚本并将其全部保存在 cron 中的一行中。
同时添加另一个编辑。 2>&1 /dev/null
只是在这个例子中,我尝试在不同的地方制作 2>&1 /path/to/slacktee
以及 2>
和 1>
的不同组合以及一些 |
好吧,还有我能想到的所有其他不同方法,但那也行不通。
我会创建一个单独的脚本,(mysqlbackup.sh),并将 crontab 更改为:
* * * * * mysqlbackup.sh
您的脚本可能看起来像(未经测试):
#!/bin/bash
mysqldump --host=mysql.example.com --user=mysql dbname 2>/tmp/errors | gzip > /tmp/mysqldump.gz
if [ -s /tmp/errors ]; # if file has a size
then
echo "Something went wrong"
else
echo "OK"
fi
这当然需要用 aws s3 cp...
内容进行扩展...