開始および終了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

ついに私に合った解決策を見つけました。

ユニットを2つのデーモンプロセスに分割し、各デーモンプロセスに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

おすすめ記事