Linux에서 부팅 시 스크립트 자동으로 실행하기

리눅스 사용자는 Windows 사용자들 보다는 커맨드를 사용한 프로그램 실행이 익숙할 것입니다. 리눅스에서는 커맨드의 비중이 비교적 큽니다.
그 중 셸 스크립트는 여러 커맨드를 연속으로 실행할 수 있게 해줍니다.
이러한 스크립트를 Linux가 부팅될 때 실행하도록 할 수 있습니다.

이 글은 Plex Server에 Google Drive를 마운트하는 강좌에서 연결되는 글이므로 Plex 위주로 설명합니다.

스크립트 만들기

  • 커맨드도 텍스트이기 때문에 스크립트도 텍스트로 만듭니다.
  • 파일 확장자는 .sh입니다.
  • 첫 줄은 항상 #!/bin/bash 로 시작합니다.(사용하는 터미널에 따라 다를 수 있습니다.)
  • 커맨드의 끝에 &을 넣으면 명령이 끝나기를 기다리지 않습니다.

예시

#!/bin/bash
bash /home/KollHong/rclone.sh &

반복문이 포함 된 스크립트를 실행하려고 한다고 가정할 때, &을 넣지 않으면 해당 스크립트가 끝나지 않기 때문에 다음 스크립트가 실행되지 않습니다.
보통 #은 실행하지 않는 주석 표현입니다. 하지만 #!는 실행파일이라는 것을 명시하는 표현입니다.

스크립트에서 실행하는 /home/KollHong/rclone.sh는 아래와 같습니다.

#!/bin/bash
while :
do
    MOUNTTYPE=\`cat /proc/mounts | grep /home/KollHong/rclone/GoogleDrive | awp '{ print $3 }'

    if \[ $MOUNTTYPE \] && \[&MOUNTTYPE = "fuse.rclone" \]
    then echo '>> already mounted']

    else
        rclone mount kollhong: --allow-other --default-permission --no-modtime --writeback-cache -q /home/KollHong/rclone/GoogleDrive &
        ls /home/KollHong/rclone/GoogleDrive/
    fi

    sleep 60
done

while문은 반복문 입니다. 조건을 넣지 않으면 무한 반복합니다.
do 이하에서는 마운트되었는지 확인하고, else 이하에서는 마운트를 합니다. PlexDrive에서는 ls를 한 번 해야 한다고 해서 ls문도 넣었습니다.
혹시 마운트 해제될 때를 대비하여 60초 동안 쉬고 다시 반복합니다.

실행 권한 주기

chmod 755 ~/run.sh
chown root ~/run.sh
chmod 755 ~/rclone.sh

부팅 중 실행 될 스크립트의 소유자를 바꾸고 실행 권한을 줍니다.

권한 편에서 권한에 대해 자세히 알아보기

심볼릭 링크 만들기

Windows 에서의 시작 프로그램 폴더와 비슷한 방식입니다. Windows 에서 시작 프로그램 폴더에 프로그램을 넣어두면 부팅시에 프로그램이 함께 실행됩니다. 이 때, 보통은 프로그램 자체를 시작 프로그램 폴더에 넣지 않고 프로그램 바로가기를 시작 프로그램 폴더에 넣습니다. 

리눅스도 마찬가지 입니다. 리눅스도 Windows 의 시작 프로그램 폴더와 같은 디렉토리가 있습니다. 그 디렉토리가 /etc/init.d입니다.

sudo ln -s /home/KollHong/run.sh /etc/init.d/run.sh

심볼릭 링크를 만듭니다. root 권한으로 실행해야 합니다. 앞으로는 /etc/init.d/run.sh에 접근하면 /home/KollHong/run.sh의 파일을 읽습니다.

이전에 Android를 사용할 때와 Qnap NAS에서는 /etc/init.d 디렉토리에 스크립트 파일을 넣으면 바로 실행이 가능했습니다.

하지만 우분투와 같은 리눅스는 /etc/init.d에 스크립트를 넣을 때는 시스템 업데이트를 해줘야 합니다.

sudo update-rc.d run.sh defaults

부팅 시에 스크립트를 실행하는 또 다른 방법이 있습니다.

/etc/rc.local 파일에 원하는 스크립트를 추가하는 방법입니다.

이 방법을 이용하면 시스템 업데이트를 해줄 필요가 없습니다.

다만 rc.local은 오류가 발생하면 종료되도록 되어 있기 때문에 추가한 스크립트가 실행되지 않을 수 있습니다.

ps. 음... 사실 Linux기반 데스크톱에서 이 방법은 사용하지 않습니다. Linux 기반 NAS들도 마찬가지구요.
-물론 사용은 가능합니다.

저는 옛날에 스마트폰에서 적용할 때 사용했던 방법입니다.
제가 이런 방법을 사용하는건 보안면에서 크게 중요하지 않기 때문이기도 하고, 옛날 방법이 익숙해서이기도 합니다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다