Włącz ręcznie program start, aby automatycznie uruchomić program po uruchomieniu

1

Zainstalowałem osrm na moim serwerze, home/myname/osrm jeśli ręcznie uruchomię proces z katalogu poza dir, dzięki osrm-routed data/map.osrmczemu działa dobrze, ale niestety na pierwszym planie i po ponownym uruchomieniu, jeśli muszę uruchomić go ponownie ręcznie. Próbowałem zainstalować go jako usługę

[Unit]
Description = starts up the osrm service
After = network.target
[Service]
WorkingDirectory=/home/christian/osrm/
User=christian
ExecStart = /usr/local/bin/osrm-routed   osrm-routed data/map.osrm
[Install]
WantedBy = multi-user.target

Ale kiedy uruchamiam usługę, zawsze otrzymuję takie komunikaty o błędach

 [/etc/systemd/system/osrmstart.service:7] Executable path specifies a directory, ignoring: /usr/local/bin/osrm-routed/ osrm-routed data/map.osrm
Sep 01 14:03:46 ubuntu systemd[1]: osrmstart.service: Service lacks both ExecStart= and ExecStop= setting. Refusing.

Co robię źle? Jestem bardzo nowy w Ubuntu.


Dziękuję za odpowiedź na moje pytanie:

kiedy biegnę:

file /usr/local/bin/osrm-routed

dostaję następujące:

/usr/local/bin/osrm-routed: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=767f57fe712d25f03f1b2d18fd541d0253cd86d4, not stripped

zmieniłem moją osrmstart.service na:

[Unit]
Description = starts up the osrm service
After = network.target
[Service]
Type=simple
WorkingDirectory=/home/christian/osrm/
User=christian
ExecStart = /usr/local/bin/osrm-routed   osrm-routed data/map.osrm
[Install]
WantedBy = multi-user.target

Teraz, jeśli najpierw wyłączę, włączę, osrmstart.servicea następnie uruchomię usługę za pomocą sudo systemctl start osrmstart.service: Nie otrzymuję błędu - ale usługa się nie uruchamia i nie jest dostępna.

Ręcznie mogę rozpocząć proces, gdy przechodzę do mojego katalogu domowego ~ / home / osrm, a następnie piszę, osrm-routed data/map.osrma Enter to rozpoczyna proces - proces jest serwerem, który czeka na hoście lokalnym: port5000 na zapytania takie jak

http://192.168.1.200:5000/route/v1/driving/11.57787,48.13877;11.52045,48.13969?steps=true&alternatives=true&
geometries=geojson

i zwraca drogę od celu do miejsca docelowego, ale ręcznie proces przebiega w polu.

Potrzebuję usługi działającej w tle, także podczas ponownego uruchamiania systemu. Może to tylko błąd typu - ale próbowałem tak wielu rodzajów pisania. Może moja odpowiedź pomaga trochę więcej za pomoc. Z góry dziękuję.

chrześcijanin

ChristianRuegamer
źródło
Tak jak powiedziałem, że twój kod zawiera błędy składniowe, sprawdź linki, które podałem!
George Udosen,
1
Teraz uruchom which osrm-routed, przypuszczam, że dostaniesz /usr/local/bin/osrm-routedstąd, że będzie to polecenie do użycia w systemdpliku usługi. I proszę usuń niepotrzebne spacje w kodzie!
George Udosen

Odpowiedzi:

2

Widzę tutaj kilka problemów:

  1. Błędy składniowe kodu Twój kod powinien wyglądać tak:

    [Unit]
    Description=starts up the osrm service
    After=network.target
    
    [Service]
    Type=daemon
    WorkingDirectory=/home/christian/osrm/
    User=christian
    ExecStart=/usr/local/bin/osrm-routed data/map.osrm
    
    [Install]
    WantedBy=multi-user.target
    
  2. /usr/local/bin/osrm-routedwydaje się być katalogiem, a nie executableplikiem.

    • Biegnij, file /usr/local/bin/osrm-routedaby ustalić na pewno, ale myślę, że możesz to wiedzieć, po prostu zmieniając się w to.
  3. Uwaga: nie wiem, jaki typ programu próbujesz uruchomić, więc Typemoże to być opcjaType=[simple|daemon|oneshot|forking|notify|idle]

Więcej informacji:

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sect-Managing_Services_with_systemd-Unit_Files.html

https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files

George Udosen
źródło