相关疑难解决方法(0)

系统字符串转义

如果我运行此命令

/bin/bash -c 'while true;do /usr/bin/etcdctl set my-container "{\"host\": \"1\", \"port\": $(/usr/bin/docker port my-container 5000 | cut -d":" -f2)}" --ttl 60;sleep 45;done'
Run Code Online (Sandbox Code Playgroud)

我从etcd返回了预期的结果{“主机”:“ 1”,“端口”:49155}

但是如果我把它放在一个systemd文件中

ExecStart=/bin/bash -c 'while true;do /usr/bin/etcdctl set my-container "{\"host\": \"1\", \"port\": $(/usr/bin/docker port my-container 5000 | cut -d":" -f2)}" --ttl 60;sleep 45;done'
Run Code Online (Sandbox Code Playgroud)

我回来了{host:1,port:49155}

为什么文件中的转义符会有所不同?我该如何解决?谢谢!!

systemd etcd

5
推荐指数
3
解决办法
7119
查看次数

Spring Boot 应用程序作为 systemd 服务:日志文件

我知道可以从 Spring Boot 应用程序创建一个可用作 systemd 服务的 jar。我使用手册从我在 Debian Jessie OS 上的应用程序创建 systemd 服务。Eveyrthing 工作正常,但我找不到如何将日志写入 /var/syslog 的单独文件的方法。正如文档所说:

请注意,与作为 init.d 服务运行时不同,运行应用程序的用户、PID 文件和控制台日志文件在 systemd 下的行为不同,必须使用“服务”脚本中的适当字段进行配置。有关更多详细信息,请参阅服务单元配置手册页。

它应该在 *.service 文件中配置,但我找不到任何合适的选项。有人在这个问题上有任何经验吗?

logging debian spring systemd spring-boot

4
推荐指数
1
解决办法
6236
查看次数

如何从Raspbian上的systemd服务正确重定向stdout/stderr?

我使用systemd在Raspbian(Jessie)上设置了一个服务,使其在启动后启动.守护程序配置如下所示:

[Unit]
After=multi-user.target

[Service]
Type=idle
User=root
ExecStart=/bin/sh -c "exec /home/pi/sources/mydaemon.py >> /home/pi/mydaemon.log 2>&1"

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

该重定向>>无效.我已经尝试了大多数可用的选项StandardOutput,StandardError但他们从未最终将我的脚本输出打印到/var/log/daemon.log,journalctl -u mydaemon.service只显示有关正在启动和停止的服务的消息.

我目前没有对脚本中的文件描述符做任何有趣的事情.我只是想让我的print()logging.info()陈述出现在我可以阅读的地方.有任何想法吗?

(为了清楚起见,守护进程必须以root身份运行.这可能与我的打印问题有关吗?)

python python-3.x raspberry-pi systemd raspbian

4
推荐指数
3
解决办法
4254
查看次数

bash -e flag和'&&'list命令

怎么解释这个bash行为?不要退出'&&'语句?

# bash -xe
bash-4.1# trap 'echo ERROR' ERR
+ trap 'echo ERROR' ERR
bash-4.1# false && true
+ false
bash-4.1# false && false
+ false
bash-4.1# false || true
+ false
+ true
bash-4.1# false || false
+ false
+ false
++ echo ERROR
ERROR
Run Code Online (Sandbox Code Playgroud)

bash

3
推荐指数
1
解决办法
1113
查看次数

系统记录到外部文件

我有以下Systemd服务脚本来运行Spring启动应用程序 -

[Unit]
Description=Upstart for Security
After=network.target network-online.target
Wants=network-online.target

[Service]
User=root
WorkingDirectory=/home/ubuntu/security
ExecStart=/usr/bin/java -classpath java -Dspring.profiles.active=stage -jar /home/ubuntu/security/security-0.0.1-SNAPSHOT.jar > /home/ubuntu/security/security.log 2>&1
SuccessExitStatus=143
Restart=on-failure
RestartSec=120s

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)


我将脚本保存在以下位置 -

 /etc/systemd/system
Run Code Online (Sandbox Code Playgroud)


我运行以下命令来运行systemd服务脚本 -

1. sudo systemctl enable security.service -or- sudo systemctl daemon-reload
2. sudo systemctl status security.service 
3. sudo systemctl start security.service
Run Code Online (Sandbox Code Playgroud)


要检查日志,我发出命令 -

journalctl -u security.service
Run Code Online (Sandbox Code Playgroud)

并用于SHIFT+G滚动到eof

我可以通过上面的步骤检查日志,但是我希望它们位于/ home/ubuntu/security中的外部文件中,作为security.log
如何实现它?我在系统脚本中做了哪些更改?

ubuntu systemd ubuntu-16.04

3
推荐指数
1
解决办法
3298
查看次数