Saya mencoba menyiapkan skrip bash sebagai layanan jaringan yang mendengarkan di tcp port 6666. Tetapi layanan gagal saat memulai dengan kesalahan ini:
heartbeat]# systemctl status heartbeat.service
● heartbeat.service - Service de collecte des signaux de vie
Loaded: loaded (/etc/systemd/system/heartbeat.service; disabled; vendor preset: disabled)
Active: failed (Result: resources)
mai 12 12:32:48 Chalet systemd[1]: heartbeat.service: Got more than one socket.
mai 12 12:32:48 Chalet systemd[1]: heartbeat.service: Failed to run 'start' task: Invalid argument
mai 12 12:32:48 Chalet systemd[1]: Failed to start Service de collecte des signaux de vie.
mai 12 12:32:48 Chalet systemd[1]: heartbeat.service: Unit entered failed state.
mai 12 12:32:48 Chalet systemd[1]: heartbeat.service: Failed with result 'resources'.
mai 12 12:33:18 Chalet systemd[1]: heartbeat.service: Got more than one socket.
mai 12 12:33:18 Chalet systemd[1]: heartbeat.service: Failed to run 'start' task: Invalid argument
mai 12 12:33:18 Chalet systemd[1]: Failed to start Service de collecte des signaux de vie.
mai 12 12:33:18 Chalet systemd[1]: heartbeat.service: Failed with result 'resources'.
Saya tidak mengerti maksud pesan ini "heartbeat.service:Got more than one socket". Bisakah Anda membantu saya memahami di mana saya salah?
Saya mengkonfigurasi systemd seperti ini :
detak jantung.socket :
[Unit]
Description=Socket pour le demon heartbeat
PartOf=heartbeat.service
[Socket]
ListenStream=0.0.0.0:6666
Accept=true
[Install]
WantedBy=sockets.target
detak jantung.service :
[Unit]
Description=Service de collecte des signaux de vie
After=network.target heartbeat.socket
Requires=heartbeat.socket
[Service]
Type=simple
ExecStart=/bin/bash /usr/heartbeat/heartbeat.bash
RemainAfterExit=no
StandardInput=socket
StandardOutput=inherit
[Install]
WantedBy=multi-user.target
/usr/heartbeat/heartbeat.bash adalah :
#!/bin/bash
while true
do
read -r entree
if [[ $entree == "frequence" ]]
then
echo "3600"
fi
if [[ -n $entree ]]
then
logger "heartbeat receveid : $entree"
fi
done
Jawaban yang Diterima:
Mengganti nama detak jantung.service [email protected] berhasil.
Jawabannya ada di halaman manual systemd.socket (RTFM dua kali jika tidak cukup…):
Untuk setiap file soket, file layanan yang cocok harus ada, yang menjelaskan layanan untuk memulai lalu lintas masuk pada soket (lihat systemd.service(5) untuk informasi lebih lanjut tentang file .service). Nama unit .service secara default sama dengan nama unit .socket, tetapi dapat diubah dengan opsi Service=yang dijelaskan di bawah ini. Bergantung pada pengaturan opsi Accept=yang dijelaskan di bawah, unit .service ini harus dinamai seperti unit .socket, tetapi dengan akhiran yang diganti, kecuali diganti dengan Service=; atau harus berupa unit template yang dinamai dengan cara yang sama. Contoh:file soket foo.socket memerlukan layanan foo.service yang cocok jika Accept=false disetel. Jika Accept=true disetel, file template layanan [dilindungi email] harus ada dari mana layanan dibuat untuk setiap koneksi masuk.
Akibatnya layanan belum dimulai karena dia diinstansiasi oleh systemd dan dipicu oleh unit soket (yang harus dimulai untuk mendengarkan port tcp untuk koneksi masuk)
Karena kami tidak memberikan nama apa pun untuk instance, bagi mereka yang ingin tahu tentang nama instance yang diberikan oleh %I dalam layanan, tampaknya nomor instance dikurangi satu (yaitu instance pertama memiliki 0 ID ) :
[[email protected]Chalet ~]# systemctl status heartbeat.socket
● heartbeat.socket - Socket pour le demon heartbeat
Loaded: loaded (/etc/systemd/system/heartbeat.socket; disabled; vendor preset: disabled)
Active: active (listening) since Mon 2017-05-15 15:25:03 CEST; 7h ago
Listen: 0.0.0.0:6666 (Stream)
Accepted: 5; Connected: 5
mai 15 15:25:03 Chalet systemd[1]: Listening on Socket pour le demon heartbeat.
[[email protected] ~]# ncat 127.0.0.1 6666
what is %I in the service ?
^C
[[email protected] ~]# systemctl status heartbeat.socket
● heartbeat.socket - Socket pour le demon heartbeat
Loaded: loaded (/etc/systemd/system/heartbeat.socket; disabled; vendor preset: disabled)
Active: active (listening) since Mon 2017-05-15 15:25:03 CEST; 7h ago
Listen: 0.0.0.0:6666 (Stream)
Accepted: 6; Connected: 6
mai 15 15:25:03 Chalet systemd[1]: Listening on Socket pour le demon heartbeat.
[[email protected] ~]# journalctl -ra
-- Logs begin at Sat 2016-11-19 19:12:18 CET, end at Mon 2017-05-15 23:02:21 CEST. --
mai 15 23:02:21 Chalet root[7224]: heartbeat receveid : what is %I in the service ?
mai 15 23:01:43 Chalet systemd[1]: Started Service de collecte des signaux de vie pour 5 (127.0.0.1:50920).