Automatiskt starta "applikation"/tjänst i ubuntu vid boot?

Permalänk
Medlem

Automatiskt starta "applikation"/tjänst i ubuntu vid boot?

Försöker få en applikation/tjänst att starta automatiskt när servern bootas/rebootas.
Men lyckas inte alls få till det.

Den startas med ./autoscan (när CWD är tjänstens directory), dvs filen man kör heter autoscan.
Lägger jag in någon form av variant av det i crontab med @reboot innan så startar den INTE när man rebootar servern.

Har testat olika varianter med sökvägen till filen, med och utan sudo innan. T.ex:
./autoscan
~/autoscan/autoscan
/root/autoscan/autoscan

Inget vill starta upp det när servern bootar.

Några tips på hur jag kan lösa det?

Permalänk
Medlem
Skrivet av naaw:

./autoscan
~/autoscan/autoscan

De där är ju inte så bra. cron lär ju inte stå i rätt katalog för att första raden ska fungera, och cron har nog en annan hemkatalog vilket gör att andra raden inte fungerar.

Om jag vore du skulle jag göra en systemd.service. Om du googlar hittar du massor av exempel.

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Medlem
Skrivet av Phod:

De där är ju inte så bra. cron lär ju inte stå i rätt katalog för att första raden ska fungera, och cron har nog en annan hemkatalog vilket gör att andra raden inte fungerar.

Om jag vore du skulle jag göra en systemd.service. Om du googlar hittar du massor av exempel.

Men då borde tredje raden fungera?
Ska kolla på att skapa en tjänst, tack.

Permalänk
Medlem
Skrivet av Phod:

Om jag vore du skulle jag göra en systemd.service. Om du googlar hittar du massor av exempel.

Ja, detta är det bästa valet i en typisk modern Linuxdistro.

Skrivet av naaw:

Men då borde tredje raden fungera?

Sett till sökvägen, ja.
Sedan kan det ju finnas något annat problem, t.ex. om det finns ytterligare beroenden på miljön som inte stämmer överens i crons värld jämfört om du själv startar det på kommandoraden.

Visa signatur

Desktop spel m.m.: Ryzen 9800X3D || MSI X870 Tomahawk Wifi || MSI Ventus 3x 5080 || Gskill FlareX 6000 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Arbetsstation: Ryzen 7945HX || Minisforum BD790i || Asus Proart 4070 Ti Super || Kingston Fury Impact 5600 65 GB || WD SN850 2TB || Samsung 990 Pro 2TB || Fractal Ridge
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Medlem

Till tips: du kan inte köra sudo via vanliga crontab, men kör du sudo crontab så får du roots crontab att leka med, du kan dumpa in saker där. Du behöver inte lägga till sudo efter @reboot då heller, då scriptet kommer köras som root.

Visa signatur

Intel i7 10700KF (Noctua NH-D15) | Asus RADEON RX 7900 XTX TUF | 32 GB DDR4 HyperX Fury | Corsair RM1000X | Zalman Z9 Iceberg MS | Arch Linux, Win11

Permalänk
Medlem
Skrivet av Ostbullen:

Till tips: du kan inte köra sudo via vanliga crontab, men kör du sudo crontab så får du roots crontab att leka med, du kan dumpa in saker där. Du behöver inte lägga till sudo efter @reboot då heller, då scriptet kommer köras som root.

Tack, lärde jag mig något nytt.
Skapade dock en service och nu rullar det på fint.
Ska jag bara lyckas hitta loggarna också.

Permalänk
Medlem

Du kan googla systemd service. Kör programmet i backgrunden.

/Edit sorry någon redan nämnde systemd. Jag tror Apache airflow fungerar bra också för det.

Permalänk
Medlem
Skrivet av Aseth222:

Du kan googla systemd service. Kör programmet i backgrunden.

/Edit sorry någon redan nämnde systemd. Jag tror Apache airflow fungerar bra också för det.

Jag firade tydligen lite för tidigt.
tjänsten startas inte automatiskt vid boot/reboot trots att jag kört systemctl enable autoscan.
men kör jag systemctl start autoscan efter reboot så startar tjänsten.

Så här ser min service ut i alla fall:

[Unit] Description=Autoscan service After=network.target [Service] User=root ExecStart=/usr/local/bin/autoscan/autoscan Restart=always [Install] WantedBy=multi-user.target

Hittade detta när jag körde journalctl:

Sep 05 18:45:01 plex autoscan[139]: Sep 5 18:45:01 FTL Failed initialising target error="version: Get \"http://192.168.1.65:32400/\": dial tcp 192.168.1.65:32400: connect: connection refused: target unavai> Sep 05 18:45:01 plex systemd[1]: autoscan.service: Main process exited, code=exited, status=1/FAILURE Sep 05 18:45:01 plex systemd[1]: autoscan.service: Failed with result 'exit-code'.

Verkar helt enkelt som den inte hittar target (inget nätverk än?) och då failar med att starta tjänsten. MEN borde den inte vänta på nätverk i och med att jag har lagt in After=network.target i min "unit" i tjänsten?

Eller efter lite betänketid så kan det säkerligen, eller med hundra procents säkerhet, vara så att target (i detta fall plex) inte hunnit starta än, i och med att den körs på samma container.

Då är frågan hur man med After kan få tjänsten att vänta in Plex. Någon som vet?

Hittade plexmediaserver.service och la in den under after= men det hjälpte tyvärr inte. Får fortfarande samma fel.

Permalänk
Medlem
Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Medlem

Jag har testat med network.target också.
Jag har dessutom testat att i config för autoscan ange localhost, 127.0.0.1 och plex för att på så sätt komma runt nätverket då både plex och autoscan körs på samma. Men får samma fel ändå. Så gissar att det är Plex som måste startas helt innan det funkar.

Och har i autoscan.service lagt till både require= och after= på plexmediaserver.service utan någon framgång. Fortfarande samma fel och får starta tjänsten manuellt med systemctl start autoscan

Jag ser dessutom i journalctl att den har mountat mina share INNAN jag får fail på att starta tjänsten. Så nätverket är helt klart där.

Permalänk
Medlem
Skrivet av naaw:

Jag ser dessutom i journalctl att den har mountat mina share INNAN jag får fail på att starta tjänsten. Så nätverket är helt klart där.

Förlåt, läste fel. Finns det inte någon inställning man kan peta på i autoscan-tjänsten? Det låter ju helt sjukt att den dör bara för att den inte kommer åt en URL vid uppstart. Säger "systemctl status autoscan.service" samma sak?

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Medlem
Skrivet av Phod:

Förlåt, läste fel. Finns det inte någon inställning man kan peta på i autoscan-tjänsten? Det låter ju helt sjukt att den dör bara för att den inte kommer åt en URL vid uppstart. Säger "systemctl status autoscan.service" samma sak?

Tjänsten har jag gjort själv. Så den kan man peta på hur mycket man vill. Men själva programmet kan jag inte göra mycket åt. Hittar den inte plex servern så startar den inte programmet helt enkelt.

Men tycker det är märkligt att det inte funkar eftersom jag ser att plex har startat innan den försöker starta tjänsten. Börjar tro att det är något annat. Men har ingen aning om vad det skulle kunna vara…

Permalänk
Medlem
Skrivet av naaw:

Tjänsten har jag gjort själv. Så den kan man peta på hur mycket man vill. Men själva programmet kan jag inte göra mycket åt. Hittar den inte plex servern så startar den inte programmet helt enkelt.

Men tycker det är märkligt att det inte funkar eftersom jag ser att plex har startat innan den försöker starta tjänsten. Börjar tro att det är något annat. Men har ingen aning om vad det skulle kunna vara…

Jag var oklar, med tjänsten menade jag programmet. Så den startar inte direkt efter Plex, men efter en liten stund? Om du testar att stoppa autoscan, stoppa plex, starta autoscan och starta plex, blir det samma sak då?

Man tycker att om autoscan inte hittar plex så ska den bara vänta en liten stund, inte dö helt och hållet.

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Medlem
Skrivet av Phod:

Jag var oklar, med tjänsten menade jag programmet. Så den startar inte direkt efter Plex, men efter en liten stund? Om du testar att stoppa autoscan, stoppa plex, starta autoscan och starta plex, blir det samma sak då?

Man tycker att om autoscan inte hittar plex så ska den bara vänta en liten stund, inte dö helt och hållet.

Ja den försöker ju 5 gånger eller vad det är, sen ger den upp.
Stoppar jag autoscan och plex och sedan försöker starta autoscan så får jag samma felmeddelande.

Såg dock att plex autostartades igen och när jag försökte starta autoscan direkt efter så fick jag alltså felmeddelandet.
Men när det gått en stund så startar autoscan om jag kör systemctl start autoscan igen.

Så verkar som att det, trots att det står "plex server started" i journalctl så är det inte helt startat. Något som gör att autoscan inte får kontakt förrän några sekunder senare, tillräckligt långt efter att de försök den gör har nått sin gräns och slutar försöka.

EDIT:
Fungerade till slut när jag la till en delay med ExecStartPre=/bin/sleep 10.

Permalänk
Medlem

Testa att ändra "After=network.target" till:
Wants=network-online.target
After=network-online.target

Detta kommer invänta IP-adressering (så länge klienten stödjer det vilket majoriteten gör även om en extratjänst kan behöva startas) innan uppstart.
Du kan även byta "Wants=" till "Requires=" istället för ett hårdare beroendekrav.
Det finns inget skäl att ange User=root som är default oavsett.