将手动程序启动改为开机时自动程序启动

将手动程序启动改为开机时自动程序启动

我已经在服务器上安装了 osrm,home/myname/osrm 如果我手动从目录之外启动该进程,osrm-routed data/map.osrm它可以正常工作,但不幸的是在前台和重启后,如果必须再次手动启动它。我尝试将其安装为服务

[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

但是当我启动服务时我总是收到这样的错误消息

 [/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.

我做错了什么?我对 Ubuntu 还很陌生。


谢谢你回答我的问题:

当我跑步时:

file /usr/local/bin/osrm-routed

我得到以下信息:

/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

我将 osrmstart.service 更改为:

[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

现在,如果我首先禁用,然后启用osrmstart.service,然后启动服务 sudo systemctl start osrmstart.service:我没有收到错误 - 但服务没有启动并且不可用。

我可以手动启动该进程,当我导航到我的主目录 ~/home/osrm 然后输入osrm-routed data/map.osrmEnter 启动该进程 - 该进程是一个服务器,在 localhost:port5000 上等待查询,例如

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

并返回从目标到目的地的路径,但手动该过程在地面运行。

我需要在后台运行该服务,重启系统时也是如此。也许这只是一个类型错误 - 但我尝试了很多种类型。也许我的回答对我有帮助。提前谢谢。

基督教

答案1

我在这里看到几个问题:

  1. 代码语法错误你的代码应该是这样的:

    [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-routed似乎是一个目录而不是文件executable

    • 运行file /usr/local/bin/osrm-routed以确定,但我认为你只要改变它就可以知道。
  3. 注意:不知道您要运行什么类型的程序,因此Type选项可能是Type=[simple|daemon|oneshot|forking|notify|idle]

更多信息:

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

相关内容