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=
내에서 쉘 redicet을 사용 하려고 한다는 것입니다 . 이 셸 동작은 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
뿐만 아니라 단위 이름을 식별자로 사용하는 것이 표준 동작이므로 이 세 가지를 설정하는 것은 실제로 필요하지 않습니다. stderr
이는 단지 명확성을 위한 것입니다.
아마도 로그가 메모리 대신 디스크 저장소에 기록되어 영구적인 기록을 갖도록 Storage=persistent
설정할 수 있습니다 . /etc/systemd/journald.conf
(디스크 사용량을 확인하거나 conf 파일에서 제한을 설정하세요 SystemMaxFileSize=
. 자세한 내용은여기)
통화 기록이 통과되었습니다 journalctl -u mysqlwifi
.