mea*_*our 136 linux rhel systemd centos7 rhel7
我试图将系统服务的o/p重定向到文件但它似乎不起作用.我这样做如下:
[Unit]
Description=customprocess
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/bin/binary1 agent -config-dir /etc/sample.d/server
StandardOutput=/var/log1.log
StandardError=/var/log2.log
Restart=always
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
请建议将o/p重定向到文件的正确方法
Val*_*ace 190
我认为有一种更优雅的方法来解决问题:使用标识符将stdout/stderr发送到syslog,并指示syslog管理器按程序名称拆分其输出.
在systemd服务单元文件中使用以下属性:
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=<your program identifier> # without any quote
Run Code Online (Sandbox Code Playgroud)
然后,假设您的发行版使用rsyslog来管理系统日志,请/etc/rsyslog.d/<new_file>.conf使用以下内容创建一个文件:
if $programname == '<your program identifier>' then /path/to/log/file.log
& stop
Run Code Online (Sandbox Code Playgroud)
重启rsyslog(sudo systemctl restart rsyslog)并享受!您的程序stdout/stderr仍然可以通过journalctl(sudo journalctl -u <your program identifier>)获得,但它们也可以在您选择的文件中使用.
资料来源:http://wiki.rsyslog.com/index.php/Filtering_by_program_name(已损坏的链接,存档可在Archive.org上获得)
Tre*_*ith 57
如果你有一个较新的一个较新的发行版systemd(systemd236或更新版本),你可以设置的值,StandardOutput或StandardError到file:YOUR_ABSPATH_FILENAME.
很长的故事:
在新版本systemd有一个比较新的选项(GitHub的请求是自2016年ISH和提高合并/关闭2017年ISH),在这里可以设置的值,StandardOutput或StandardError到file:YOUR_ABSPATH_FILENAME.该file:path选项记录在最新的systemd.exec手册页中.
这个新功能相对较新,因此不适用于像centos-7(或之前的任何中心)这样的旧发行版.
Shu*_*tan 41
您可能会收到此错误:
Failed to parse output specifier, ignoring: /var/log1.log
Run Code Online (Sandbox Code Playgroud)
从systemd.exec(5)手册页:
StandardOutput=控制已执行进程的文件描述符1(STDOUT)所连接的位置.注意到之一
inherit,null,tty,journal,syslog,kmsg,journal+console,syslog+console,kmsg+console或socket.
该systemd.exec(5)手册页介绍了相关记录其他选项.另请参见systemd.service(5)和systemd.unit(5)手册页.
或者也许你可以尝试这样的事情(所有在一条线上):
ExecStart=/bin/sh -c '/usr/local/bin/binary1 agent -config-dir /etc/sample.d/server 2>&1 > /var/log.log'
Run Code Online (Sandbox Code Playgroud)
Raj*_*ain 16
我建议在systemd 文件本身中添加stdout和stderr文件service。
引用:https : //www.freedesktop.org/software/systemd/man/systemd.exec.html#StandardOutput=
如您所配置,它不应该:
StandardOutput=/home/user/log1.log
StandardError=/home/user/log2.log
Run Code Online (Sandbox Code Playgroud)
它应该是:
StandardOutput=file:/home/user/log1.log
StandardError=file:/home/user/log2.log
Run Code Online (Sandbox Code Playgroud)
当您不想一次又一次地重新启动服务时,此方法有效。
这将创建一个新文件,并且不会追加到现有文件中。
使用代替:
StandardOutput=append:/home/user/log1.log
StandardError=append:/home/user/log2.log
Run Code Online (Sandbox Code Playgroud)
注意:请确保您已经创建目录。我猜它不支持创建目录。
Tig*_*gra 15
如果由于某种原因无法使用rsyslog,这将做:
ExecStart=/bin/bash -ce "exec /usr/local/bin/binary1 agent -config-dir /etc/sample.d/server >> /var/log/agent.log 2>&1"
小智 10
简短的回答:
StandardOutput=file:/var/log1.log
StandardError=file:/var/log2.log
Run Code Online (Sandbox Code Playgroud)
如果您不希望每次运行服务时都清除文件,请改用 append:
StandardOutput=append:/var/log1.log
StandardError=append:/var/log2.log
Run Code Online (Sandbox Code Playgroud)
我们使用 Centos7,带有 systemd 的 Spring Boot 应用程序。我正在运行java,如下所示。并将 StandardOutput 设置为文件对我不起作用。
ExecStart=/bin/java -jar xxx.jar -Xmx512-Xms32M
Run Code Online (Sandbox Code Playgroud)
以下解决方案无需设置标准输出即可工作。通过 sh 运行 java 如下。
ExecStart=/bin/sh -c 'exec /bin/java -jar xxx.jar -Xmx512M -Xms32M >> /data/logs/xxx.log 2>&1'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
136092 次 |
| 最近记录: |