如何在 openrc 中找到进程的标准输出?
这是我创建守护进程的方式。
/etc/init.d/mydaemon
#!/sbin/openrc-run
command="python3"
command_args="/srv/http/tornado.py"
command_background="yes"
pidfile="/tmp/tornado.pid"
Run Code Online (Sandbox Code Playgroud)
我在日志中得到的只是:
* Starting tornado ... [ ok ]
Run Code Online (Sandbox Code Playgroud)
我有默认/etc/rc.conf设置rc_logger="YES"。我想得到的是类似于 systemd 允许查看守护进程的标准输出sudo journalctl -u mydaemon
我在 C++ 代码 (prog2) 上运行内存检查工具 (prog1),这两者都给了我一个巨大而详细的输出。为了解决一些错误,我需要将此输出保存到文件中。
我尝试将标准输出重定向到一个文件:
prog1 prog2 > outfile.txt
Run Code Online (Sandbox Code Playgroud)
但这给了我一个包含 prog2 输出的文件,而 prog1 的输出仍然到终端。
任何人都知道一种指定我希望两个输出都转到文件的方法吗?喜欢(prog1 prog2) > outfile.txt?
我想使用 keepassxc 向 neomutt 进行身份验证。我找不到将密码发送到 neomutt 的标准输入的方法。我怎样才能做到这一点 ?
我想象这样的事情:
keepassxc-cli exportpass mydatabase.kdbx mymail@gmail.com
Run Code Online (Sandbox Code Playgroud)
最终输出将是密码本身。我怎样才能做到这一点?
编辑:我已经发现了keepassxc-cli show Database.kdbx accounts.google.com。但它不显示密码。相反,它返回PROTECTED.
谢谢你的帮助
可能的重复:
如何使 iconv 用转换后的输出替换输入文件?
我经常使用他们的公共 DNS 名称
( ec2-12-34-56-78.compute-1.amazonaws.com)连接到 amazon ec2 ,因此我的known_hosts文件被大量ec2我永远不会再使用的条目所淹没。
我知道我可能可以sed -i用来就地编辑,但我想使用grep,所以我这样做了:
grep -v ec2 ~/.ssh/known_hosts > ~/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)
这留下known_hosts了一个空文件。如果我做:
grep -v ec2 ~/.ssh/known_hosts > ~/.ssh/tmp
mv ~/.ssh/tmp ~/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)
然后一切都很好,但我很困惑,为什么读取和写入同一个文件的叶子空白的,如果有迂回方式,使用的时候grep,cat等等。
我想对我的 bash 脚本进行一些故障排除。是否有一个简短而简单的命令可以生成两者stdout,stderr以便我可以使用2>&1它?对不起,如果这看起来微不足道,但我现在想不出一个。
我目前正在将监控工具的输出重定向到一个文件,但是我想做的是根据我的请求将此输出重定向到一个新文件(使用键绑定),而不停止上述工具。
就像是
monitor_program | handle_stdout
Run Code Online (Sandbox Code Playgroud)
Wherehandle_stdout允许我定义一个新文件在某个点放置日志的位置。
我知道我可以轻松编写它,但我想知道是否有任何工具已经允许这样做。
在流处理和队列中,我们有背压的概念,即如果生产者进程比消费者进程快,我们应该有一种机制来减慢生产者的速度以避免超出可用内存/存储空间(不丢弃消息,这可能会或可能不会被接受)。
一段时间以来,我一直很好奇是否可以使用 stdio 在生产者 Unix 进程(例如fooin foo | bar)上施加这种意义上的背压。看起来即使当缓冲区达到容量时写入 stdout 被阻塞,生产者进程仍然有必要做正确的事情 (TM),而不是在内存中积累数据等待写入 stdout。单线程阻塞程序似乎通过了测试,但异步程序可能必须拥有自己的内部缓冲和背压机制,以免因等待写入的数据而爆炸。
所以; 这在多大程度上是可能的,具体情况是什么?
我正在使用 Amazon Linux 并尝试从我的主目录运行 cron 作业(我在机器上没有 sudo 权限)。我正在通过执行 crontab -e 并添加这一行来设置 cron 作业
30 18 * * * /home/myuser/run_my_script.sh
Run Code Online (Sandbox Code Playgroud)
其中。但是,我观察到事情似乎没有运行,所以我想弄清楚原因。但是运行这个
[myuser@mymachine ~]$ tail /var/log/cron
tail: cannot open ‘/var/log/cron’ for reading: Permission denied
Run Code Online (Sandbox Code Playgroud)
没有帮助。我怎样才能弄清楚为什么事情没有运行,或者在我的脚本中出现问题的地方?
我尝试通过以下方式重定向输出流从 airodump-ng 获取文件:
airodump-ng mon0 2>&1 | tee file.txt
Run Code Online (Sandbox Code Playgroud)
但这会附加到文件而不是重写它。所以在那之后,我尝试通过 fifo 管道将输出重定向到其他输出流:
第一个终端:
mkfifo fifo1
echo "while [ 1 ]; do cat ~/fifo1 2>&1 | tee file.txt done" > readfifo.sh
chmod +x readfifo.h
xterm -e readfifo.sh
Run Code Online (Sandbox Code Playgroud)
第二个终端:
airodump-ng mon0 2>&1 > fifo1
Run Code Online (Sandbox Code Playgroud)
在结果中我们有一个附加的 file.txt,但为什么呢?如何在文件中只有终端的输出,而不是附加到它?是否可以在写入文件时过滤 airodump-ng 的输出?
最好的问候,V7
假设我运行命令:
sudo ./list_members Physicians
Run Code Online (Sandbox Code Playgroud)
我想像这样为输出添加前缀:
Physicians user@domain.com
Physicians user2@domain.com
Physicians user3@domain.com
Physicians user4@domain.com
Run Code Online (Sandbox Code Playgroud)
我可以像这样为 StdOutput 添加前缀吗?
stdout ×10
stdin ×3
bash ×2
pipe ×2
shell ×2
stderr ×2
airodump-ng ×1
amazon-linux ×1
command-line ×1
cron ×1
daemon ×1
fifo ×1
keepassx ×1
linux ×1
mailman ×1
mutt ×1
openrc ×1
output ×1
password ×1
shell-script ×1