1. 부팅 시에 자동 실행 (systemd 서비스 등록)

systemd 서비스 등록을 하면 부팅 중 로그인 하기 전에 원하는 스크립트를 자동실행하도록 할 수 있다.

로그인 전에 실행하기 때문에 로그인 후에 필요한 기능(GUI 이용하는 프로그램 등)은 동작하지 않는다.

(1) systemd 서비스 등록

a. .service 파일 작성

아래 명령어를 실행하여 custom_script_run.service 파일을 새로 만들어 작성한다.

파일명은 원하는대로 작성한다.

$ sudo vim /etc/systemd/system/custom_script_run.service

파일의 내용은 아래와 같이 작성한다.

부팅 중에 자동으로 /usr/bin/custom_docker_run.sh 스크립트를 실행하는 내용이다.

[Unit]
Description=Docker Run
Requires=docker.service
After=docker.service

[Service]
Type=forking
User=${user name}
Restart=on-failure
RestartSec=1s
ExecStart=/usr/bin/custom_docker_run.sh

[Install]
WantedBy=multi-user.target

${user name}은 로그인 계정 이름으로 설정한다.

b. 서비스 등록

아래 명령어를 실행하면 서비스가 등록되어 부팅 중에 실행된다.

$ systemctl enable custom_script_run.service

(2) 자동 실행 할 스크립트 작성 (docker 실행하는 스크립트 예시)

a. 스크립트 작성

부팅 중에 자동 실행하고자 하는 custom_docker_run.sh 파일을 만들어 작성한다.

$ sudo vim /usr/bin/custom_docker_run.sh

아래와 같이 내용 작성을 하면 사전에 만들어둔 ros_melodic 이름의 도커 컨테이너를 실행하고, 컨테이너 내부에서 /root/ros_ws/src/run.sh 스크립트를 실행한다.

#!/bin/bash

docker start ros_melodic;

sleep 1;

docker exec ros_melodic sh /root/ros_ws/src/run.sh;

exit 0;

b. 권한 설정

내용 작성 후에는 아래와 같이 권한 설정을 해준다.

$ sudo chmod 775 /usr/bin/custom_docker_run.sh

(3) 컨테이너 내부에서 실행할 스크립트 예시 (ROS 패키지 실행 예시)

위 과정을 통해 부팅 중에 컨테이너 내부의 /root/ros_ws/src/run.sh 스크립트를 자동 실행하도록 만들었다.

컨테이너 안에서 아래 명령어를 통해 /root/ros_ws/src/run.sh 스크립트를 생성하고 작성한다.

$ vim /root/ros_ws/src/run.sh

tmux를 통해 ROS 패키지를 실행하는 스크립트 예시는 아래와 같이 작성한다.

#!/bin/bash

source /opt/ros/melodic/setup.bash;
source /root/ros_ws/devel/setup.bash;

tmux new-session -d -s whoyayawho;
tmux new-window -t whoyayawho:1;
tmux new-window -t whoyayawho:2;
tmux new-window -t whoyayawho:3;

tmux send -t whoyayawho:1 "cd /root/ros_ws/src/package1/launch; roslaunch --wait ./package1.launch" C-m
tmux send -t whoyayawho:2 "cd /root/ros_ws/src/package2/launch; roslaunch --wait ./package2.launch" C-m
tmux send -t whoyayawho:3 "cd /root/ros_ws/src/package3/launch; roslaunch --wait ./package3.launch" C-m
tmux send -t whoyayawho:0 "cd; roscore" C-m

exit 0


2. 로그인 시에 쉘스크립트 자동 실행 (시작프로그램 등록)

  • 우분투 프로그램 중에 Startup Applications 프로그램 실행
  • add 클릭
  • command 탭에서 명령어 작성
    gnome-terminal -- bash -c "/path/to/script/temp.sh; exec bash"
    


3. 쉘스크립트 파일 더블클릭하여 실행

  • 쉘스크립트 더블클릭 시에 실행
    gsettings set org.gnome.nautilus.preferences executable-text-activation 'launch'
    
  • 쉘스크립트 더블클릭 시에 실행 묻기
    gsettings set org.gnome.nautilus.preferences executable-text-activation 'ask'
    
  • 쉘스크립트 더블클릭 시에 코드 열기
    gsettings set org.gnome.nautilus.preferences executable-text-activation 'display'
    


Updated: