Tôi đã nhận được một kịch bản bash về cơ bản này:
#!/bin/bash
[...]
while true; do
str="broadcast "`randArrayElement "messages[@]"`
server_send_message $str
sleep $interval
done
Bây giờ tôi muốn chạy nó như một dịch vụ systemd, tập lệnh dịch vụ của tôi trông như thế này:
[Unit]
Description=Announcer
After=network.target
[Service]
ExecStart=/usr/local/bin/somescript &; disown
ExecStop=/usr/bin/kill -9 `cat /tmp/somescript.pid`
Type=forking
PIDFile=/tmp/somescript.pid
[Install]
WantedBy=default.target
Thật không may khi tôi chạy dịch vụ này thông qua service somescript start
nó đang hoạt động nhưng do vòng lặp thực sự mà thiết bị đầu cuối của tôi bị kẹt khi bắt đầu tập lệnh:
● somescript.service - somescript service
Loaded: loaded (/etc/systemd/system/somescript.service; disabled; vendor preset: enabled)
Active: activating (start) since Wed 2016-08-17 12:22:34 CEST; 43s ago
Control: 17395 (somescript)
CGroup: /system.slice/somescript.service
├─17395 /bin/bash /usr/local/bin/somescript &; disown
└─17409 sleep 600
Làm cách nào tôi có thể chạy tập lệnh này như một dịch vụ mà không bị kẹt trong "bắt đầu" / vòng lặp trong khi đúng?