我试图得到一个脚本,推动我的系统login到CoreOS的logentries。 为了弥补这个事实,实例在AWS上分拆时没有互联网连接,我把这个命令放在了一个while循环中。
从命令行运行脚本while循环工作得很好。 但是,当systemd运行它的脚本时,它会立即退出netcat超时,所以它永远不会再有机会尝试。
有没有办法让systemd对退出脚本不那么积极?
系统输出,永远不会去“睡眠netcat”
Jul 23 22:26:21 core-01 systemd[1]: Starting Push journal logs to logentries.com... Jul 23 22:26:21 core-01 systemd[1]: Started Push journal logs to logentries.com. Jul 23 22:26:21 core-01 bash[880]: trying netcat Jul 23 22:26:31 core-01 bash[880]: Ncat: Connection timed out.
journal2logentries.sh
#!/usr/bin/env bash token=logentriestoken while true do echo 'trying netcat' journalctl -o short -f | awk -v token=$token '{ print token, $0; fflush(); }' | ncat --ssl --ssl-verify data.logentries.com 20000 echo 'sleeping netcat' sleep 30s done
logentries.service
[Unit] Description=Push journal logs to logentries.com After=systemd-journald.service After=systemd-networkd.service [Service] Restart=always ExecStart=/bin/bash /home/core/journal2logentries.sh [Install] WantedBy=multi-user.target
更新:
看来,真正的问题是,当netcat死亡系统的/ bin / sh进程仍在运行的东西。 注意:url是故意不正确的testing
logentries.service - Push journal logs to logentries.com Loaded: loaded (/etc/systemd/system/logentries.service; disabled) Active: active (running) since Mon 2014-07-28 17:12:04 UTC; 1min 48s ago Main PID: 16305 (sh) CGroup: /system.slice/logentries.service ├─16305 /bin/sh -c journalctl -o short -f | awk -v token=token_here '{ print token, $0; fflush(); }' | ncat --ssl --ssl-verify -vv ogentries.com 20000 ├─16306 journalctl -o short -f └─16307 awk -v token=80b4b3b6-1315-4b76-ac69-f530c1dec47f { print token, $0; fflush(); } Jul 28 17:12:04 ip-172-31-19-155.us-west-2.compute.internal systemd[1]: logentries.service holdoff time over, scheduling restart. Jul 28 17:12:04 ip-172-31-19-155.us-west-2.compute.internal systemd[1]: Stopping Push journal logs to logentries.com... Jul 28 17:12:04 ip-172-31-19-155.us-west-2.compute.internal systemd[1]: Starting Push journal logs to logentries.com... Jul 28 17:12:04 ip-172-31-19-155.us-west-2.compute.internal systemd[1]: Started Push journal logs to logentries.com. Jul 28 17:12:04 ip-172-31-19-155.us-west-2.compute.internal sh[16305]: Ncat: Version 6.40 ( http://nmap.org/ncat ) Jul 28 17:12:04 ip-172-31-19-155.us-west-2.compute.internal sh[16305]: Ncat: Could not resolve hostname "ogentries.com": Name or service not known. QUITTING.
从pipe道切换到进程replace。
http://paraf.in/abs-guide/process-sub.html
https://stackoverflow.com/a/18360260/136408
这是我想出的单元文件:
logentries.service
[Unit] Description=Push journal logs to logentries.com After=systemd-journald.service After=systemd-networkd.service [Service] Restart=always RestartSec=30s ExecStart=/bin/bash -c "ncat --ssl --ssl-verify data.logentries.com 20000 < <(awk -v token=token_here '{ print token, $0; fflush(); }' < <(journalctl -o short -f))" [Install] WantedBy=multi-user.target
你有没有尝试过使用|| /bin/true || /bin/true在您的命令返回零退出状态,以防止systemd检测到退出状态不良?
journalctl -o short -f | awk -v token=$token '{ print token, $0; fflush(); }' | ncat --ssl --ssl-verify data.logentries.com 20000 || /bin/true