简单的脚本:
#!/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 及其交付工作。
我不知道邮件传递。
但我需要将所有传入的电子邮件 (*@mydomain.com) 重定向到一个 php 脚本。
我正在使用 debian
是否存在一个简单的邮件服务器来做到这一点?(没有exim,postfix等)
我只需要重定向所有邮件请求。
如果没有 exim、postfix 等就无法做到这一点,我该怎么做?
谢谢!
我是 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”身份运行我的脚本时,出现错误:此帐户当前不可用。
我不知道从哪里开始......我已经阅读了几篇没有给出明确下一步的帖子。(我不想将所有邮件重定向到脚本,对于这么简单的事情,一个答案看起来很复杂)
我正在尝试通过 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) 尝试登录到中央 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) 我有一个 docker 容器,它在启动时在前台运行一个 java 程序。java 程序侦听 上的输入stdin。如何以编程方式将文本发送到 java 程序?
容器以 开头-it,因此我可以docker attach <container-name>输入文本,使用 Enter 发送并使用 分离^p ^q。
我试过docker exec <container-name> echo my-text,但这会回显到标准输出,而不是 java 程序。我可以以某种方式将它传递给 java 程序吗?
我也在Docker 论坛中发现了一个类似的问题,但该解决方案使用screen,我宁愿有一个更干净的解决方案。
经过一番搜索,我还没有找到解决方案。我认为搜索词太笼统了。我想知道如何执行由其他来源生成的多行(在 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)
不会总是有效,似乎是一个笨拙的解决方案。
我在为 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) 如何使用另一个命令通过管道传递的参数执行相同的命令?
作为从源中提取文件名的结果,我得到:
$some_command
文件名1
文件名2
文件名3
...
文件名N
我想用这些文件名创建文件touch。如何遍历touch这些名称?