标签: pipe

为什么这款 T 恤会丢失标准输出?

简单的脚本:

#!/bin/bash
remote_ssh_account="depesz@localhost"
directory_to_tar=pgdata
exec nice tar cf - "$directory_to_tar" | \
    tee >(
        md5sum - | \
        ssh "$remote_ssh_account" 'cat - > /tmp/h3po4-MD5-2012-03-13.tar'
    ) | \
    ssh "$remote_ssh_account" 'cat - > /tmp/h3po4-data-2012-03-13.tar'
Run Code Online (Sandbox Code Playgroud)

理论上它应该将数据和校验和传送到远程机器。

但不知何故,T恤失败了:

tee: standard output: Resource temporarily unavailable
Run Code Online (Sandbox Code Playgroud)

做了strace,但没有任何结果。我看到两个 ssh 都启动了,并且 tee 向它们写入,但只有 ( md5sum | ssh ) 的管道获取数据 - ssh“数据”的 strace 没有获取任何数据,5 秒后 tee 显示错误。

除此之外所有的工作。建立了 2 个连接,tar 工作,md5sum 及其交付工作。

linux ssh bash pipe tee

6
推荐指数
2
解决办法
6188
查看次数

将所有收到的邮件重定向到脚本中

我不知道邮件传递。

我需要将所有传入的电子邮件 (*@mydomain.com) 重定向到一个 php 脚本。

我正在使用 debian

是否存在一个简单的邮件服务器来做到这一点?(没有exim,postfix等)

我只需要重定向所有邮件请求。

如果没有 exim、postfix 等就无法做到这一点,我该怎么做?

谢谢!

email php debian redirect pipe

6
推荐指数
2
解决办法
4425
查看次数

后缀管道到脚本:execvp 权限被拒绝错误

我是 postfix 的新手,正在尝试将消息通过管道发送到特定的电子邮件地址到 bash 脚本。我正在运行 CentOS 6,以防万一。

我的脚本有 777 权限(用于测试),当我向测试帐户发送电子邮件时,我看到 postfix 尝试运行该脚本。这是邮件日志中的相关行:

2 月 16 日 15:08:40 lserver2 postfix/local[19675]:F4045103000:to=,orig_to=,relay=local,delay=1737,delays=1737/0.01/0/0.01,dsn=4.3.0,status=deferred (暂时失败。命令输出:本地:致命:execvp /data/scripts/testscript:权限被拒绝)*

这看起来像是权限问题。当我尝试以“postfix”或“nobody”身份运行我的脚本时,出现错误:此帐户当前不可用。

我不知道从哪里开始......我已经阅读了几篇没有给出明确下一步的帖子。(我不想将所有邮件重定向到脚本,对于这么简单的事情,一个答案看起来很复杂)

permissions postfix centos pipe

6
推荐指数
1
解决办法
7309
查看次数

Postfix - 将多个收件人消息作为单个消息进行管道传输

我正在尝试通过 Postfix 将电子邮件通过管道传输到我拥有的 Python 脚本。目前,具有多个收件人的消息会针对每个收件人通过管道传送到脚本一次。无论收件人数量如何,我都希望将这些消息通过管道传送到脚本一次。

在 /etc/postfix/main.cf 我有:

default_transport = customsmtp
Run Code Online (Sandbox Code Playgroud)

该传输方法在 /etc/postfix/master.cf 中定义为:

customsmtp  unix  -      n      n     -     -     pipe
    flags=FR  user=cody argv=/var/relay/custom-relay/endpoint.py type:relay env:production sender:${sender} recipient:${recipient}
Run Code Online (Sandbox Code Playgroud)

以下是 Postfix 邮件日志的摘录,显示了对脚本的多次交付:

Mar 19 20:26:29 ip-172-31-2-6 postfix/cleanup[18639]: 2ACDD24199: message-id=<000a01d06282$fd7c59c0$f8750d40$@bananatag.com>
Mar 19 20:26:29 ip-172-31-2-6 postfix/qmgr[29229]: 2ACDD24199: from=<cody@email.com>, size=2715, nrcpt=2 (queue active)
Mar 19 20:26:30 ip-172-31-2-6 postfix/pipe[18640]: 2ACDD24199: to=<cody@example.com>, relay=customsmtp, delay=0.89, delays=0.2/0.01/0/0.67, dsn=2.0.0, status=sent (delivered via customsmtp service)
Mar 19 20:26:30 ip-172-31-2-6 postfix/pipe[18641]: 2ACDD24199: to=<cody@testing.com>, relay=customsmtp, delay=0.9, delays=0.2/0.04/0/0.66, dsn=2.0.0, status=sent (delivered via …
Run Code Online (Sandbox Code Playgroud)

postfix pipe

6
推荐指数
1
解决办法
2044
查看次数

Apache错误日志管道失败

尝试登录到中央 syslog 服务器,或者直接使用 Apache 的 ErrorLog 管道到记录器,或者让 syslog 转发,但没有任何工作,并且错误对我来说没有意义。我可以让自定义日志工作,但不能让 ErrorLog 工作。在 Ubuntu 14.04 和 rsyslogd 7.4.4 上使用 Apache/2.4.7。

在我的 vhost 中配置(记录器选项后有和没有空间没有区别):

LogLevel warn
ErrorLog  "|/usr/bin/tee -a /var/log/apache2/error.log | /usr/bin/logger -tapache_err -plocal1.error"
CustomLog "|/usr/bin/logger -p local4.warning -t apache" combined
Run Code Online (Sandbox Code Playgroud)

然后得到这个错误:

/usr/bin/tee: invalid option -- 't'
Run Code Online (Sandbox Code Playgroud)

也试过(有和没有双引号):

ErrorLog "|syslog:local1"
Run Code Online (Sandbox Code Playgroud)

但后来得到:

(2)No such file or directory: AH00089: Couldn't start ErrorLog process 'syslog:local1'.
AH00015: Unable to open logs
Run Code Online (Sandbox Code Playgroud)

甚至尝试过:

ErrorLog "| /usr/bin/tee -a /var/log/apache2/error.log | nc -u -j xxx.xxx.xxx.xxx 514"
Run Code Online (Sandbox Code Playgroud)

但随后 tee 仍在抱怨:

/usr/bin/tee: …
Run Code Online (Sandbox Code Playgroud)

pipe rsyslog apache-2.4

6
推荐指数
1
解决办法
6604
查看次数

如何将文本发送到 docker 容器的标准输入?

我有一个 docker 容器,它在启动时在前台运行一个 java 程序。java 程序侦听 上的输入stdin。如何以编程方式将文本发送到 java 程序?

容器以 开头-it,因此我可以docker attach <container-name>输入文本,使用 Enter 发送并使用 分离^p ^q

我试过docker exec <container-name> echo my-text,但这会回显到标准输出,而不是 java 程序。我可以以某种方式将它传递给 java 程序吗?

我也在Docker 论坛中发现了一个类似的问题,但该解决方案使用screen,我宁愿有一个更干净的解决方案。

pipe stdin docker

6
推荐指数
2
解决办法
5975
查看次数

用于正则表达式替换的 Bash 命令

什么 bash 命令可用于管道上的正则表达式替换?

     cat foo.txt | someprogram
Run Code Online (Sandbox Code Playgroud)

linux ubuntu bash regex pipe

5
推荐指数
1
解决办法
1926
查看次数

Bash:从标准输入执行管道

经过一番搜索,我还没有找到解决方案。我认为搜索词太笼统了。我想知道如何执行由其他来源生成的多行(在 bash 提示符下)。例如,我有一个 Python 脚本,它动态生成许多 bash 命令并将print它们发送到标准输出。我希望将这些行作为 bash 脚本执行,而不必将它们保存到磁盘。例如:

$ python example.py
touch 1 2 3 4 5
rm 1 2 3 4 5
echo "Done"
Run Code Online (Sandbox Code Playgroud)

我想做类似的事情:

$ python example.py | executeLines
Run Code Online (Sandbox Code Playgroud)

bash 中是否存在这样的命令/功能?有时其中一个命令可能会以非零退出状态退出,因此附加&&到每个命令然后运行:

$ `python example.py`
Run Code Online (Sandbox Code Playgroud)

不会总是有效,似乎是一个笨拙的解决方案。

scripting shell bash pipe

5
推荐指数
1
解决办法
6730
查看次数

后缀/别名中的管道

可能的重复:
如何配置 postfix 以将所有传入的电子邮件通过管道传输到脚本?

我在为 Redmine(或“|cat > /tmp/temp”)设置简单管道时遇到问题

/etc/postfix/虚拟:

support@myhost.com support
Run Code Online (Sandbox Code Playgroud)

/etc/postfix/别名:

support: "|/opt/redmine-1.2.2/processemail.sh"
Run Code Online (Sandbox Code Playgroud)

主文件

virtual_alias_maps = hash:/etc/postfix/virtual, mysql:/etc/postfix/mysql_virtual_forwards.cf
virtual_mailbox_domains = myhost.com, mysql:/etc/postfix/mysql_virtual_domains.cf
virtual_mailbox_maps = hash:/etc/postfix/virtual_alias, mysql:/etc/postfix/mysql_virtual_mailboxes.cf

alias_maps = hash:/etc/postfix/aliases
alias_database = $alias_maps
Run Code Online (Sandbox Code Playgroud)

处理email.sh:

#!/bin/sh
/opt/redmine-1.2.2/extra/mail_handler/rdm-mailhandler.rb --url http://myhost.com --key f5obfctmGfqZWnOWNtR8 --project test --tracker support --allow-override tracker,project --verbose --unknown-user accept --no-permission-check
Run Code Online (Sandbox Code Playgroud)

我已经跑了newaliases; postmap virtual; postalias aliases; postalias virtual_alias; newalias- 是的,可能跑得过头了,但仍然错过了 :(

我已经运行了 newaliases 并重新启动了 postfix。邮件照常投递,但没有添加任何内容到 /tmp

这是唯一关于virtual.

Dec 10 04:08:41 master postfix/virtual[3112]:
A3F46AD1BF: to=<support@myhost.com>, relay=virtual, delay=0.4,
delays=0.38/0.01/0/0.01, …
Run Code Online (Sandbox Code Playgroud)

postfix pipe aliases

5
推荐指数
1
解决办法
8701
查看次数

在 Linux 中的参数列表上循环命令

如何使用另一个命令通过管道传递的参数执行相同的命令?

作为从源中提取文件名的结果,我得到:

    $some_command
    文件名1
    文件名2
    文件名3
    ...
    文件名N

我想用这些文件名创建文件touch。如何遍历touch这些名称?

linux pipe

4
推荐指数
2
解决办法
2446
查看次数

标签 统计

pipe ×10

bash ×3

linux ×3

postfix ×3

aliases ×1

apache-2.4 ×1

centos ×1

debian ×1

docker ×1

email ×1

permissions ×1

php ×1

redirect ×1

regex ×1

rsyslog ×1

scripting ×1

shell ×1

ssh ×1

stdin ×1

tee ×1

ubuntu ×1