Mis*_*ale 5 linux service systemd
我试图制作如下的系统服务:
[Unit]
Description=Syslog
[Service]
Type=simple
Environment="TESTEXTSERVICESFILES=/opt/test/extservices"
Environment="TESTCONFDATA=/storage/test/conf"
ExecStartPre=/bin/echo ${TESTEXTSERVICESFILES}/syslog/bin/nxlog $TESTCONFDATA
ExecStart=/opt/test/extservices/syslog/bin/nxlog -c ${TESTCONFDATA}/syslog/nxlog.conf
#ExecStart=/${TESTEXTSERVICESFILES}/syslog/bin/nxlog -c ${TESTCONFDATA}/syslog/nxlog.conf
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
运行' sudo systemctl daemon-reload; sudo systemctl start test-syslog; sudo systemctl status test-syslog ',我得到以下成功输出:
? test-syslog.service - TestSyslog
Loaded: loaded (/usr/lib/systemd/system/test-syslog.service; enabled; vendor preset: disabled)
Active: deactivating (stop-sigterm) since Fri 2018-02-23 10:15:09 UTC; 11ms ago
Process: 9474 ExecStart=/./opt/test/extservices/test-syslog/bin/nxlog -c ${TESTCONFDATA}/test-syslog/nxlog.conf (code=exited, status=0/SUCCESS)
Process: 9471 ExecStartPre=/bin/echo /.${TESTEXTSERVICESFILES}/test-syslog/bin/nxlog $TESTCONFDATA (code=exited, status=0/SUCCESS)
Main PID: 9474 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/test-syslog.service
??9478 /./opt/test/extservices/test-syslog/bin/nxlog -c /storage/test/conf/test-syslog/nxlog.conf
Feb 23 10:15:09 lt-x260-1606.test.local systemd[1]: test-syslog.service: control process exited, code=exited status=0
Feb 23 10:15:09 lt-x260-1606.test.local systemd[1]: test-syslog.service got final SIGCHLD for state start-pre
Feb 23 10:15:09 lt-x260-1606.test.local systemd[1]: About to execute: /./opt/test/extservices/test-syslog/bin/nxlog -c ${TESTCONFDATA}/test-syslog/nxlog.conf
Feb 23 10:15:09 lt-x260-1606.test.local systemd[1]: Forked /./opt/test/extservices/test-syslog/bin/nxlog as 9474
Feb 23 10:15:09 lt-x260-1606.test.local systemd[1]: test-syslog.service changed start-pre -> running
Feb 23 10:15:09 lt-x260-1606.test.local systemd[1]: Job test-syslog.service/start finished, result=done
Feb 23 10:15:09 lt-x260-1606.test.local systemd[1]: Started Test Syslog.
Feb 23 10:15:09 lt-x260-1606.test.local systemd[1]: Child 9474 belongs to test-syslog.service
Feb 23 10:15:09 lt-x260-1606.test.local systemd[1]: test-syslog.service: main process exited, code=exited, status=0/SUCCESS
Feb 23 10:15:09 lt-x260-1606.test.local systemd[1]: test-syslog.service changed running -> stop-sigterm
Run Code Online (Sandbox Code Playgroud)
这里的服务已成功启动.但是,当我评论第一个ExecStart指令并取消注释第二个时,我得失败:
? test-syslog.service - Test Syslog
Loaded: loaded (/usr/lib/systemd/system/test-syslog.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Fri 2018-02-23 10:11:44 UTC; 11ms ago
Process: 9243 ExecStart=/$TESTEXTSERVICESFILES/test-syslog/bin/nxlog -c $TESTCONFDATA/test-syslog/nxlog.conf (code=exited, status=203/EXEC)
Process: 9239 ExecStartPre=/bin/echo /.${TESTEXTSERVICESFILES}/test-syslog/bin/nxlog $TESTCONFDATA (code=exited, status=0/SUCCESS)
Main PID: 9243 (code=exited, status=203/EXEC)
Feb 23 10:11:44 lt-x260-1606.test.local echo[9239]: /./opt/test/extservices/test-syslog/bin/nxlog /storage/test/conf
Run Code Online (Sandbox Code Playgroud)
这次服务无法启动,就像它不想以$ {TESTEXTSERVICESFILES}变量开始一样启动流程.有人知道为什么即使命令行在两种情况下都不相同它也不起作用?
您不能在实际命令中使用变量.systemd.service:
要执行的命令必须是绝对路径名.它可能包含空格,但不允许使用控制字符.
您可能不想将它包装在shell命令(执行参数扩展)中:
ExecStart=/bin/bash -c '/${TESTEXTSERVICESFILES}/syslog/bin/nxlog -c ${TESTCONFDATA}/syslog/nxlog.conf'
Run Code Online (Sandbox Code Playgroud)
Environment=使用 ,代替EnvironmentFile=, 来定义多个环境变量。
[Service]
Type=simple
EnvironmentFile=/etc/sysconfig/customsyslog
ExecStart=/bin/echo ${TESTEXTSERVICESFILES}/syslog/bin/nxlog $TESTCONFDATA
Run Code Online (Sandbox Code Playgroud)
/etc/sysconfig/customsyslog将包含key=value对,例如
TESTEXTSERVICESFILES=/opt/test/extservices
TESTCONFDATA=/storage/test/conf
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8657 次 |
| 最近记录: |