linux - 带有外壳扩展的系统单元配置
问题描述
我终于尝试将我的旧 init.d 管理脚本转换为 systemd,并且遇到了我希望其他人找到解决方案的障碍。
我的应用程序需要一个参数作为它保存日志信息的文件的名称,并且我的 init 脚本在启动时使用以下行生成该名称:
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 <app>
,它们将自动轮换,等等。
如果应用程序绝对需要$LOGFILE
环境变量,您可以使用:
Environment=LOGFILE=/dev/stdout
推荐阅读
- angular - 比较角度反应形式的密码
- cassandra - cassandra中删除的数据像幽灵一样回来了
- java - 无法解析 @androidx.annotation.NonNull ,无法解析方法匿名 android.hardware.camera2
- sql-server-2012 - 我无法使用 SQL Server 数据库图表功能
- c# - 我在 mvc 应用程序中使用地图时遇到问题,地图未显示在视图中,而工作代码中没有错误
- javascript - 从公共位置调用 Angular 组件的 ngAfterViewInit
- javascript - MUI-Datatable 可扩展行
- javascript - 如何合并具有相同键的对象数组
- emacs - 如何在dired-jump中打开由backup-each-save.el创建的备份文件?
- javascript - 如何使用 d3js 在条形图上居中对齐文本标签