Linux SystemD service opstart

26 februar 2022 Skrevet af 
i Blogs
  • Skriftstørrelse
Bedøm denne artikel
(0 bedømmelser)

Automatisk opstart af processer som eks. apache nginx eller andre services udføres nogle gange via /etc/rc.local men der er også bedre metoder eks. en desktop kan ha script som startes ved login og i dette eksempel vil vi gøre det med systemD.

 

Vi har måske en srt-server som håndtere SRT input, SRT output og rtmp input men det kunne også noget helt andet.

Vi skal lave et script som klare dette og den vil ikke starte op hvis network.taget altså netværket ikke er kørende og det er lidet af det smarte med systemd:


sudo joe /etc/systemd/system/srtsrt1.service

Du kan naturligvis benytte en anden editor end joe,vim,nano men kopier dette:

[Unit]
Description=SRTSRT og RTMP eksempel
 
Wants=network.target
After=syslog.target network-online.target
 
[Service]
Type=simple
#ExecStart=/usr/local/bin/srt-serverstart.sh
# srt 1935 lytter.  Srt out 1936 og tcp 1937  
ExecStart=/usr/local/bin/srt-server 1935 1936 1937
Restart=on-failure
RestartSec=10
KillMode=process
 
[Install]
WantedBy=multi-user.target

 

Du kan se den siger hvor vores script skal startes og at den vil genstarte den process hvis efter hvis den stopper.

Vores srtsrtrtmp.service fil skal lige ha korrekte rettigheder:

sudo chmod 640 /etc/systemd/system/srtsrtrtmp.service

Vi kan nu starte stoppe og se service med 
 
sudo systemctl status srtsrtrtmp.service
 
Den kender placering på script/process via ExecStart angivelse.
 
Indholdet i srt-serverstart.sh udføres og vi kan enable eller disable en process med systemctl kommando.
 
Efter sudo systemctl start srtsrtrtmp.service så vil den måske se sådan ud:
 
sudo systemctl status srtsrtrtmp.service
 
● srtsrtrtmp.service - SRT SRT RTMP eksempel
     Loaded: loaded (/etc/systemd/system/srtsrtrtmp.service; disabled; vendor preset: enabled)
     Active: active (running) since Sat 2022-02-26 08:45:38 CET; 14s ago
   Main PID: 17034 (srt-server)
      Tasks: 9 (limit: 9404)
     Memory: 1.0M
        CPU: 2.364s
     CGroup: /system.slice/srtsrtrtmp.service
             └─17034 /usr/local/bin/srt-server 4001 4002 4003
 
feb 26 08:45:52 obs2nux srt-server[17076]:   libavutil      56. 70.100 / 56. 70.100
feb 26 08:45:52 obs2nux srt-server[17076]:   libavcodec     58.134.100 / 58.134.100
feb 26 08:45:52 obs2nux srt-server[17076]:   libavformat    58. 76.100 / 58. 76.100
feb 26 08:45:52 obs2nux srt-server[17076]:   libavdevice    58. 13.100 / 58. 13.100
feb 26 08:45:52 obs2nux srt-server[17076]:   libavfilter     7.110.100 /  7.110.100
feb 26 08:45:52 obs2nux srt-server[17076]:   libswscale      5.  9.100 /  5.  9.100
feb 26 08:45:52 obs2nux srt-server[17076]:   libswresample   3.  9.100 /  3.  9.100
feb 26 08:45:52 obs2nux srt-server[17076]:   libpostproc    55.  9.100 / 55.  9.100
feb 26 08:45:52 obs2nux srt-server[17076]: [rtmp @ 0x56039d1435c0] Cannot open connection tcp://0.0.0.0:4003?listen&lis>
feb 26 08:45:52 obs2nux srt-server[17076]: rtmp://0.0.0.0:4003/rtmp/rtmp2modageren: Address already in use
 
 
For at denne service selv starter op når maskinen genstartes skal du huske:
 
sudo systemctl enable srtsrtrtmp.service
 
På denne måde kan du også lave andre services med eksempelvis ffmpeg og srt input plus phassprahse 
måske en opstart af  srt-live-transmit [options] <input-uri> <output-uri> så behøver man næsten kun service filen.
 
 
En andet eksempel er opstart af srt forbindelse med passphrase
 
[Unit]
Description=SecureSrt1
 
Wants=network.target
After=syslog.target network-online.target
 
[Service]
Type=simple
# Placering af filen på Linux er /etc/systemd/system 
ExecStart=/usr/bin/srt-live-transmit "srt://:1935?mode=listener&passphrase=supercoolpassword" srt://127.0.0.1:4001
 
Restart=on-failure
RestartSec=10
KillMode=process
 
 
[Install]
WantedBy=multi-user.target
 


På den måde kan man også sætte ffmpeg op til at vente på rtmp eller srt med bestemt password næsten som vi gør med srt-live-transmit.

I øvrigt er SRT ikke compileret ind i min aktuelle version af VLC på Linux men eksempelvis kan vi benytte srt-live-transmit sådan:

srt-live-transmit srt://:5002 udp://127.0.0.1:1234

Det betyder connect til lokalt til port 5002 med srt og send data ud på 127.0.0.1 port 1234 og ja det kunne være
man netop havde brug for denne function 

Du kan nu i VLC åbne netværks adressen med vlc udp://:1234 eller udp://@:1234

https://github.com/ALLATRA-IT/srt-server har ikke passphrase muligheder så så den er åben... så man skal lige ha styr på hvilke porte man åbner.
 

Du kan måske med fordele benytte ffmpeg også sikre dig at output er h264 og acc - altså noget som vlc med sikkerhed forstår ;)

203 Senest ændret Lørdag, 26 marts 2022 16:31
Mere i denne kategori: