我有这个使用nodejs启动mysqlwifi.js的服务
$ cat /lib/systemd/system/mysqlwifi.service;
[Unit]
Description=MySQL exampledb update
After=multi-user.target
After=network-online.target
Wants=network-online.target
[Service]
Type=idle
Restart=always
RestartSec=6
ExecStart=/usr/bin/node /home/dietpi/node_server/mysqlwifi.js > /home/dietpi/node_server/mysqlwifi.log 2>&1
[Install]
WantedBy=multi-user.target
如果我直接在终端中运行 node /home/dietpi/node_server/mysqlwifi.js 我确实会在 shell 中看到输出
答案1
问题是,您正在尝试在systemd
'sExecStart=
语句中使用 shell redicet。此 shell 行为不能直接转移到systemd
服务单元。
选项1:将其全部写入 shell 脚本并更改执行的命令:
#my_script
#!/bin/bash
/usr/bin/node /path/to/script.js >>/path/to/logfile 2>&1
并使用StartExec=/path/to/my_script.sh
(设置可执行位)。
选项2:在单元文件中使用以下内容来手动重定向流(参考):
ExecStart=/usr/bin/node /path/to/script.js
StandardOutput=file:/path/to/logfile
StandardError=file:/path/to/logfile
用于StardardOutput=append:/path/to/logfile
附加而不是覆盖文件(相同StandardError
),如上面的参考所述。
选项3: 使用systemd
自己的日志服务systemd-journald
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=mysqlwifi
笔记:设置这三个实际上是没有必要的,因为使用单位syslog
名称stdout
以及stderr
使用单位名称作为标识符是标准行为 - 这只是为了清楚起见。
也许可以设置Storage=persistent
为/etc/systemd/journald.conf
使日志能够写入磁盘存储而不是内存,从而具有永久记录。 (检查磁盘使用情况或通过以下方式在conf文件中设置限制SystemMaxFileSize=
。更多详细信息这里)
通话记录通过journalctl -u mysqlwifi
.