리눅스 사용자는 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들도 마찬가지구요.
-물론 사용은 가능합니다.
저는 옛날에 스마트폰에서 적용할 때 사용했던 방법입니다.
제가 이런 방법을 사용하는건 보안면에서 크게 중요하지 않기 때문이기도 하고, 옛날 방법이 익숙해서이기도 합니다.