2021-01-29, 19:23
  #1
Medlem
Tjena Flashbackare.

Jag får inte till att starta en process genom systemd. Har provat alla möjliga lösningar men det skiter sig'hela tiden.'Får bara felmeddelandet på processen. Har följande uppsätt på en *.service fil:

Kod:
[Unit]
Description=Dineros gunicorn
After
=network.target

[Service]
User=root
ExecStart
=/home/dinero/scripts/gunicorn.sh
Restart
=always

[Install]
WantedBy=multi-user.target 

och scriptet har detta uppsättet - scriptet fungerar dock som de ska när jag knaprar det in i terminalen:
Kod:
/home/dinero/.local/bin/gunicorn -b 127.0.0.1:8000 --chdir /home/dinero/html/valar programmet:program program:

Någon som har förslag på vad som är fel?
Citera
2021-01-29, 19:31
  #2
Medlem
Är det rätt "Type"

Kolla in https://www.freedesktop.org/software/systemd/man/systemd.service.html

simple, exec, forking, oneshot, dbus, notify eller idle

De vanligaste är "simple" eller "forking"
Citera
2021-01-29, 19:39
  #3
Medlem
provade att sätta Type till simple

men får bara fel. Felmeddelanden är 203 Exec error
Citera
2021-01-29, 19:46
  #4
Medlem
Är +x flaggan satt på scriptet?

# chmod +x /home/dinero/scripts/gunicorn.sh
Citera
2021-01-29, 22:10
  #5
Medlem
Citat:
Ursprungligen postat av Dinero
och scriptet har detta uppsättet - scriptet fungerar dock som de ska när jag knaprar det in i terminalen:
Kod:
/home/dinero/.local/bin/gunicorn -b 127.0.0.1:8000 --chdir /home/dinero/html/valar programmet:program program:

Någon som har förslag på vad som är fel?

Är det hela skriptet? Man brukar vanligtvis ha en shebang på första raden i skript. T.ex. "#!/usr/bin/bash" eller "#!/bin/sh" för att nämna de två vanligaste skalen. Det går att köra skript utan shebang, men frågan är om resultatet kan skilja sig om man kör ett sådant i terminalen eller i systemd?

Förresten kan du lägga till "exec " framför sökvägen till gunicorn så kommer du slippa en extra process för själva skriptet. Eller varför inte skriva hela kommandot i systemd-tjänsten istället?
Citera
2021-01-29, 22:53
  #6
Medlem
bithaxs avatar
Har du ens en fungerande systemd?

Unbuntu t.ex. använder upstart by default och då funkar inte systemd bara genom att man installerar den. Man behöver också ändra i bootloadern så att den använder systemd-boot.
__________________
Senast redigerad av bithax 2021-01-29 kl. 23:01.
Citera
2021-01-29, 23:42
  #7
Moderator
vhes avatar
Citat:
Ursprungligen postat av bithax
Har du ens en fungerande systemd?

Unbuntu t.ex. använder upstart by default och då funkar inte systemd bara genom att man installerar den. Man behöver också ändra i bootloadern så att den använder systemd-boot.

Ubuntu har väl kört Systemd per default sedan Xenial? Vilken bootloader man använder lär knappast ha någon effekt på huruvida service-filer lyckas starta sina program.
Citera
2021-01-30, 08:06
  #8
Medlem
Jo, har gjort chmod +x så det fungerer.

Fick det till slut att fungera så scriptet blir kört som det ska men fråg inte mig hur jag fick det
till.
Citera
2021-01-30, 08:08
  #9
Medlem
Citat:
Ursprungligen postat av Hominem
Är det hela skriptet? Man brukar vanligtvis ha en shebang på första raden i skript. T.ex. "#!/usr/bin/bash" eller "#!/bin/sh" för att nämna de två vanligaste skalen. Det går att köra skript utan shebang, men frågan är om resultatet kan skilja sig om man kör ett sådant i terminalen eller i systemd?

Förresten kan du lägga till "exec " framför sökvägen till gunicorn så kommer du slippa en extra process för själva skriptet. Eller varför inte skriva hela kommandot i systemd-tjänsten istället?


Ska prove dan vägen också
Citera
2021-02-08, 12:34
  #10
Medlem
Exec-fel antyder att exekveringsmiljön i sig inte är funktionell.
Använd gärna också journalen för att se vad som gick fel (journalctl -xeu namn.service) i execmiljön.

Testa att ändra din ExecStart-rad till "ExecStart=/usr/bin/bash /home/dinero/scripts/gunicorn.sh" så processerna körs igång av bash direkt även om jag misstänker att ditt fel beror på avsaknad av shebang (skadar inte med bash på raden oavsett då processen ändå kommer exekveras via bash) då systemet inte vet vad .sh innebär, utan den tolkningen utförs vid parsing i scriptet via shebang-raden.

Det finns heller inget tvång att döpa script till .sh, .bash eller dylikt.

Du behöver inte heller ange root user via User=, det är inte rekommenderat och kan orsaka problem i vissa fall + root user kör processerna oavsett User=root eller ej om inte en annan användare specificeras (systemanvändare).

För scripts/skalkod: Lägg till "IgnoreSIGPIPE=no" under [Service]-sektionen (systemd stödjer inte redirections, pipes och signaler i skalkod med denna inställning aktiv korrekt och kan ge en hel del problem (aktiveras alltid på alla tjänster likt många andra defaults).

Du kan också testa att specificera skalet med Environment="SHELL=/usr/bin/bash" och en shebang bör definitivt sättas i scriptet.

Finns en hel del matnyttig information om exekveringsmiljön och dess MÅNGA olika val i manualsidan (man systemd.exec).
Citera
2021-02-08, 15:56
  #11
Moderator
vhes avatar
Ang. path till bash så installerar åtminstone Debian-baserade distar bash i /bin/bash, snarare än /usr/bin/bash. Så det bör dubbelkollas innan du kåpypastar instruktionerna ovan.

Om det nu ens är kräver (styggelsen;) bash, vill säga.
Citera
2021-03-09, 23:08
  #12
Medlem
Freddyfishs avatar
#!/bin/bash

fattas överst i scriptet
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in