Linux 带外壳扩展的Systemd单元配置
我终于尝试将旧的init.d管理脚本转换为systemd,但遇到了一个我希望其他人找到解决方案的障碍 我的应用程序需要一个参数作为它保存日志信息的文件名,我的初始化脚本在启动时使用以下行生成该名称:Linux 带外壳扩展的Systemd单元配置,linux,bash,systemd,Linux,Bash,Systemd,我终于尝试将旧的init.d管理脚本转换为systemd,但遇到了一个我希望其他人找到解决方案的障碍 我的应用程序需要一个参数作为它保存日志信息的文件名,我的初始化脚本在启动时使用以下行生成该名称: LOGFILE=`/bin/date "+$MUDDIR/lib/log/runlog.%y%m%d-%H%M%S"` 我将如何运行这样一个构造,以便在ExecStart中使用该值 我能做一些简单的事情吗 ExecStartPre=LOGFILE=`/bin/date "+${MUDDIR}/li
LOGFILE=`/bin/date "+$MUDDIR/lib/log/runlog.%y%m%d-%H%M%S"`
我将如何运行这样一个构造,以便在ExecStart中使用该值
我能做一些简单的事情吗
ExecStartPre=LOGFILE=`/bin/date "+${MUDDIR}/lib/log/runlog.%y%m%d-%H%M%S"`
或者它会在那里尝试产卵吗?如果它将命令作为子shell运行,那么该值将被丢弃
另外,如果我指定多个ExecStartPre行,它们会按顺序执行吗
谢谢你的提示。该文档在某些地方的细节上有点浅显,我只是试图保留我的原始功能,而不是太俗气,只是让它调用我的旧脚本。我建议让systemd通过其日志管理日志记录。根本不创建日志文件。只需将应用程序写入stdout/stderr即可。这样,日志将与所有其他应用程序的日志一起存储,可以通过
journalctl
进行搜索,它们将显示在systemctl status
中,它们将自动旋转,等等
如果应用程序绝对需要$LOGFILE
环境变量,则可以使用:
Environment=LOGFILE=/dev/stdout
我同意OP关于让
journalctl
处理日志的回答。使用以下命令,而不是在环境
属性中调用/dev/stdout
:
[Service]
...
...
StandardOutput=syslog
StandardError=syslog
这将把您的日志放入系统日志,例如/var/log/messages
和journalctl
。您可以使用服务名称
访问日志:
journalctl -u myawesomeservice.service
看起来,您可以设置日志文件的路径
StandardOutput=file:/path/to/logfile.log
StandardError=file:/path/to/logfile.err
以下是提供更多信息的示例。请参见