自分のデバイスのプロファイルを作成しようとしていますが、コンピュータを有効にしてシャットダウンしてデーモンを起動しても機能しません。スクリプトは、起動時に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.target
Type=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