rc.local
파일을 이용해서 rc-local
서비스, 즉 Ubuntu 부팅이 끝난 후 자동으로 root 권한으로 프로그램을 시작하는 서비스를 사용했었다.localhost
에서 사용할 때만 잘 동작한다.ROS_MASTER_URI
와 ROS_HOSTNAME
을 이용해봤지만, 아예 launch파일이 실행 되지 않았다.systemd-networkd-wait-online
서비스를 활용한다. 먼저 상태를 확인해보면 다음과 같이 죽어있을 것이다.sudo systemctl status systemd-networkd-wait-online.service
● systemd-networkd-wait-online.service - Wait for Network to be Configured
Loaded: loaded (/lib/systemd/system/systemd-networkd-wait-online.service; disabled; vendor pres>
Active: inactive (dead)
Docs: man:systemd-networkd-wait-online.service(8)
override
파일을 만들어서 설정 해준다.sudo systemctl enable systemd-networkd-wait-online.service
sudo gedit /etc/systemd/system/systemd-networkd-wait-online.service.d/override.conf
wlan0
에 네트워크가 연결 되면 항상 프로그램을 시작한다.eno1
등이 있는데, 이는 ifconfig
명령어로 본인 컴퓨터에 어떤 네트워크가 연결되었는지 확인해보면 된다.[Service]
ExecStart=/usr/lib/systemd/systemd-networkd-wait-online -i wlan0
wlan0
네트워크가 연결될 때까지 기다리는 서비스는 생성이 되었다.systemd-networkd-wait-online
서비스가 실행되고 나서 실제로 수행할 프로그램도 서비스로 만들어서 다음과 같이 등록해주었다.sudo gedit /etc/systemd/system/ros.service
[Unit]
Description=Drone Service
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
ExecStart=/home/mason/autostart.sh
[Install]
WantedBy=multi-user.target
sudo systemctl enable ros.service
/home/mason/autostart.sh
프로그램을 1회 실행하는 서비스이다.service
작성에 대해 알고 싶으면 여기 참고autostart.sh
프로그램의 내용이다. 물론 chmod +x autostart.sh
명령어로 실행 가능한 파일로 만들어두어야 한다.#!/bin/bash
source /opt/ros/noetic/setup.bash
source /home/mason/catkin_ws/devel.setup.bash
export ROS_MASTER_URI="http://192.168.0.100:11311"
export ROS_HOSTNAME="192.168.0.100"
roscore & roslaunch --wait test_package test.launch
exit 0