【问题标题】:Running an OSRM server in background, use it, kill it在后台运行 OSRM 服务器,使用它,杀死它
【发布时间】:2021-06-09 22:27:39
【问题描述】:

对于给定的地图,我想自动化以下过程:

  1. 启动 OSRM 服务器
  2. 做一些请求
  3. 杀死服务器

手动操作很容易,但我面临单线程问题,因为 OSRM 服务器和请求是同时进行的。然后可以使用 ps aux 并提取进程 ID 来完成杀戮阶段。

我有以下 bash 脚本

   OSM=sherbrooke.osm.pbf
    OSM_NAME=`basename $OSM`
    OSRM=`echo $OSM_NAME | cut -d "." -f 1`".osrm"
    
    cleanUp(){
        echo Cleaning
        rm -f $OSM_NAME
        rm -f $OSRM*
    }
    
    startOSRMserver(){
        echo Creating OSRM file
        cp $OSM .
        docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-extract -p /opt/car.lua /data/$OSM_NAME
        
        if test -f "$OSRM"
        then
            echo Creating OSRM server
            docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-partition /data/$OSRM
            docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-customize /data/$OSRM
            docker run -t -i -p 5000:5000 -v "${PWD}:/data" osrm/osrm-backend osrm-routed --algorithm mld /data/$OSRM
            echo RUNNING
        else
            echo "Error while creating OSRM file"
        fi
    }
    
    cleanUp
    startOSRMserver 

在命令行中启动时效果很好。但是,一旦我尝试使用 & 在后台发送它,OSRM 服务器就不再可用该消息

unable to setup input stream: unable to set IO streams as raw terminal: interrupted system call

【问题讨论】:

    标签: bash osrm


    【解决方案1】:

    经过进一步调查,我发现以下方法是最有效的

    只需使用一个简单的屏幕命令

    screen -S screenName -d -m ./start_osrm.sh
    

    screenName 然后可用于识别和终止进程

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      • 2014-07-08
      • 1970-01-01
      • 1970-01-01
      • 2021-03-12
      • 1970-01-01
      相关资源
      最近更新 更多