시작 및 종료 systemd 데몬 생성 중 문제 발생

시작 및 종료 systemd 데몬 생성 중 문제 발생

내 장치에 대한 프로필을 만들려고 하는데 컴퓨터를 활성화하고 종료한 후 데몬을 시작하면 작동하지 않습니다. 스크립트는 시작 시 network.target 다음에 있는 ExecStart 줄만 실행합니다. 편집: 코드:

[Unit]
Description="Service that executes Discord Bot at Boot and Shutdown."
After=network.target
Before=poweroff.target
[Service]
ExecStart=/usr/bin/mi_script_bash.sh start
ExecStop=/usr/bin/mi_script_bash.sh stop
Type=oneshot
RemainAfterExit=true
[Install]
WantedBy= default.target poweroff.target

ExecStart 및 ExecStop 호출은 bash 스크립트 mi_script_bash.sh(NodeJs 스크립트의 간단한 문자열 비교를 호출하는 데 사용됨)에 대한 것입니다.

#!/bin/bash

[ "$1" == "start" ] && node /home/ser356/Escritorio/discordjs/app.js start

[ "$1" == "stop" ] && node /home/ser356/Escritorio/discordjs/app.js stop

그런 다음 노드 스크립트는 다음과 같습니다.

const {Client,Intents} = require("discord.js");
require('dotenv').config();
var hora=new Date();
const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES] }); 
var argumentos=process.argv[2];
console.log(argumentos)
//client.login("OTUwNTQyNDQ5MzYzODA4MzA2.YiabpA.bulmNmwGgz9s8kOPyvjngR_rSbo");



client.on('ready', () => {
var canal =  client.channels.cache.get("950644612517724171")
if(argumentos==='start'){
canal.send("Mi dueño me ha arrancado "+hora);
}

else if(argumentos==='stop'){
canal.send("Mi dueño me requiere "+hora);
}

else{
canal.send("nada")

}
});




 client.login('token')

답변1

마침내 나에게 맞는 솔루션을 찾았습니다.

유닛을 두 개의 데몬 프로세스로 나누고 각 데몬 프로세스에 chmod 0644 권한을 부여합니다.

service_discord.service:

[Unit]
Description="Service that executes Discord Bot at Boot."
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/mi_script_bash.sh start
[Install]
WantedBy=multi-user.target

그 중 서비스는 다중 사용자 상태에서 실행되는 서비스를 나타내며 포그라운드에서 실행되는 데몬 프로세스를 나타내는 After네트워크 서비스를 실행합니다.WantedBy=multi-user.targetType=simple

같은:

service_discord_end.service

[Unit]
Description="Run Discord Bot at shutdown"
DefaultDependencies=no
Before=shutdown.target
[Service]
ExecStart=/usr/bin/mi_script_bash.sh stop
[Install]
WantedBy=shutdown.target

이 경우 기본적으로 예상한 대로 Before 옵션이 있지만 After 옵션이 없기 때문에 DefaultDependency는 no입니다.

바라보다:https://github.com/systemd/systemd/issues/7113#issuecomment-337451441

그런 다음 다음을 실행하십시오.

systemctl daemon-reload
systemctl enable sistema*
systemctl start sistema*
systemctl status sistema* #optional
reboot

관련 정보