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 を端末で直接実行すると、シェルに出力が表示されます。
答え1
systemd
問題は、ステートメントExecStart=
内でシェルredecetを使用しようとしていることです。このシェルの動作はsystemd
サービスユニットに直接転送することはできません。
オプション1:すべてシェルスクリプトに書き込み、実行されるコマンドを変更します。
#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
でなく、単位名を識別子として使用するのが標準的な動作であるため、これら3つを設定することは実際には必要ありません。stderr
これは単に明確さのためです。
おそらく、ログはメモリの代わりにディスクストレージに書き込まれ、永続的な記録を持つようにStorage=persistent
設定できます。/etc/systemd/journald.conf
(ディスク使用量を確認するか、confファイルで制限を設定してくださいSystemMaxFileSize=
。詳しくはここ)
通話履歴が通過しましたjournalctl -u mysqlwifi
。