안녕하세요! 이번시간에는 라즈베리파이 부팅시 프로그램(스크립트)를 자동으로 실행되도록 설정하는 5가지 방법에 대해 설명드리겠습니다.
우선 왜 자동으로 프로그램이 실행되도록 설정해야 하는지를 알아야 겠죠?
왜 프로그램이 자동실행 될 필요가 있을까?
여러분들이 라즈베리파이로 뭔가 재밌는 프로젝트를 만들었는데 매번 전원을 껐다가 다시 켜면 프로그램을 구동시키기 위해 ssh로 접속해서 프로그램을 실행한다고 생각해보세요. 굉장히 짜증나는 일이겠죠? 아래사진의 시계를 예로 들어 보겠습니다. 아래 사진은 라즈베리파이제로를 사용해서 만든 LED시계인데요.
LED시계
위와 같이 시계를 구동하기 위해서 아래와 같이 스크립트 실행문을 입력해 주어야 하는데요.
만약 제작한 시계를 전원을 껐다 켤때마다 ssh로 외부에서 컴퓨터나 노트북을 사용해서 라즈베리파이로 접속해서 원하는 프로그램이나 스크립트를 매번 다시 실행해야 한다면 짜증나겠죠? 라즈베리파이는 아두이노와 다르게 여러 목적으로 활용될 수 있는 범용 제품이기 때문에 매번 전원이 새로 인가될 때마다 지정된 프로그램을 실행하지 않습니다. 따라서 우리가 특정 목적으로 라즈베리파이가 동작하도록 프로젝트를 만들었다면 그 목적에 맞는 프로그램을 부팅시 실행될 수 있게 설정할 필요가 있는 것입니다.
이와 같은 목적을 위해 라즈베리파이 부팅시 자동으로 프로그램이 실행되도록 하는 방법은 5가지가 있는데요. 하나씩 설명드리겠습니다.
1번째 방법: rc.local 파일을 수정하는 방법
rc.local 파일은 라즈베리파이가 부팅될 때 실행될 스크립트를 지정할 수 있는 파일입니다. 따라서 이 파일에 부팅시 실행될 스크립트의 경로를 설정해 놓으면 라즈베리파이가 부팅할 때 이 스크립트를 자동으로 실행하게 됩니다.
rc.local 파일 수정하기
rc.local 파일은 /etc/rc.local 의 경로에 있으므로 여러분이 좋아하는 에디터를 사용해서 이 파일을 우선 열어야 합니다. 이때 유의하실 점이 파일을 편집할 때는 반드시 루트계정으로 해야 한다는 점입니다.
sudo vi /etc/rc.local
저는 위와 같이 vi에디터를 사용했는데요. 여러분은 여러분이 사용하기 편한 에디터(nano, gedit 등)을 활용해서 편집하시면 됩니다.
**참고로 리눅스에서 sudo 명령어는 root계정으로 명령을 실행한다는 의미입니다.**
실행될 스크립트 추가
위와 같이 exit 0 윗 줄에 자동으로 실행될 명령어를 지정해 주면 되는데요. 한가지 유의할 점이 있습니다. 자동 실행될 프로그램이나 스크립트가 종료되지 않고 계속 반복해서 실행되는 프로그램이라면 아래처럼 마지막에 "&"(앰퍼샌드) 를 반드시 입력해 주어야 합니다.
sudo python /home/pi/sample.py &
그렇지 않으면 라즈베리파이는 부팅과정에서 이 프로세스에 막혀 다음 부팅과정을 진행하지 못하게 됩니다. "&"(앰퍼샌드)를 입력해 주면 하부 프로세스에서 이 프로그램을 실행하고 주 프로세서는 남은 부팅과정을 완료하게 됩니다.
실행될 파일을 추가했다면 제대로 동작하는지 확인하기 위해 라즈베리파이를 재 부팅해 봅시다. 라즈베리파이를 재부팅하기 위해서는
sudo reboot
위와 같이 명령어를 입력하면 됩니다.
부팅이 될 때까지 수십초 정도 기다리면 위에서 rc.local 파일에 입력했던 명령이 실행되는 것을 확인할 수 있습니다.
주의사항
이 방법을 사용할 때에는 몇가지 주의사항에 신경을 쓰셔야 하는데요. 실행될 파일은 상대경로가 아닌 절대경로를 지정해야 합니다. 예를 들자면 myscript.py대신에 /home/pi/myscript.py 와 같은 식으로 말이죠. 그리고 실행될 코드가 에러가 없는지 여러번 확인 후에 자동실행되도록 설정하는 것이 좋습니다. 왜냐하면 코드에 에러가 있으면 부팅과정에서 더 진행되지 못하고 막혀버릴 가능성이 있기 때문입니다.
2번째방법: .bashrc
두번째 방법은 .bashrc파일을 수정하는 것입니다. 이 방법은 라즈베리파이가 부팅될때 마다 실행되고 또 새로운 터미널창이 열리거나 ssh연결이 들어왔을 때에도 실행됩니다. 지정하는 방법은 'home/pi/.bashrc'파일을 수정하면 됩니다. 실행되는 프로그램은 'ctrl-c'로 중지시키는 것도 가능합니다.
그럼 파일을 수정하기 위해 아래와 같이 자신이 원하는 에디터로 파일을 열어줍니다. 저는 vim 에디터로 파일을 열었습니다.
그리고 나서 마지막 줄에 실행하고자 하는 파일과 명령어를 입력해 줍니다.
저는 Running at boot라는 메시지가 먼저 뜨고 그다음 시계 프로그램을 실행하도록 입력했습니다.
그다음 저장하고 다시 파이를 재 부팅해보면 파이가 부팅하면서 내가 지정한 프로그램을 실행하는 것을 확인 할 수 있습니다.
ssh로 파이에 다시 접속해 보면 위와 같이 Running at boot라는 메시지가 뜨는 것을 확인 할 수 있습니다.
sudo reboot
3번째방법: init.d 디렉토리 사용
세번째 방법은 여러분이 원하는 프로그램(스크립트)을 /etc/init.d 디렉토리에 넣는 것입니다. 이 디렉토리는 부팅이 시작될 때 실행될 스크립트를 모아놓는 폴더인데요. 라즈베리파이를 shutdown으로 끄거나 reboot할 때도 이 디렉토리 내의 프로그램들이 실행됩니다. 따라서 실행하고 싶은 파일(스크립트)를 이 디렉토리로 옮겨야 겠죠?
아래와 같이 리눅스의 복사 명령어를 사용하면 됩니다.
그리고 나서 옮김 디렉토리로 들어가 보면 방금 옮긴 파일을 찾을 수 있습니다.
그런데 이 옮긴 파일이 자동으로 부팅시 실행이 되려면 Linux Standard Base(LSB)라고 불리는 정해진 문법을 스크립트의 앞에 정의해야만 합니다. 따라서 옮긴 파일을 열어 아래와 같이 구문을 추가해 줍니다.
LSB
init.d 디렉토리에 있는 파일은 이 LSB 구문을 통해 부팅시 어떤 파일이 먼저 실행될지와 부팅과정을 빠르게 하기 위해 병렬로 프로그램을 실행할지 여부 등을 정하게 됩니다. 자세한 내용은 이 가이드를 참고하시기 바랍니다.
한가지 주의할 점은 옮긴 파일에 실행권한을 부여해야 한다는 것입니다. 따라서 아래와 같이 실행권한을 주는 명령어를 통해 실행권한을 부여 합니다.
마지막으로 자동실행파일을 등록하기 위해서는 아래와 같이 init.d 자동 업데이트 명령어를 내려 줍니다.
라즈베리파이를 재 부팅시켜보면 위에서 지정한 파일이 실행되는 것을 확인 할 수 있습니다.
4번째방법: SYSTEMD 사용
systemd 파일을 사용해서도 부팅할 때 실행될 프로그램을 지정할 수 있는데요. systemd파일은 리눅스시스템이 부팅될 때 어떤 프로그램이 실행될지를 지정할 수 있는 파일입니다.
그 다음 파일을 저장해 줍니다. 우리는 'clock'서비스를 만들었는데요. 이 서비스는 다중유저 환경이 가능해졌을때 실행되도록 요청하는 것입니다 'ExecStart' 부분에 입력하는 명령어는 실행되길 원하는 명령어를 넣으면 됩니다 'Type'에 idle 이라고 지정을 하면 서비스가 다른 자원들이 로드되었을 때 프로그램이 실행되는 것을 보장해 줍니다. 여기서 경로는 파이썬이 실행될 절대경로여야 하고 실행될 프로그램도 마찬가지로 절대경로로 입력해야 합니다.
위에서 만든 명령어는 파일 권한이 644가 되어야 하기 때문에 아래와 같은 명령어로 파일의 권한을 바꿔 줍니다.
sudo chmod 644/lib/systemd/system/sample.service
2단계-systemd 설정하기
이제 유닛파일을 만들었으므로 systemd가 이 유닛파일을 부팅동안에 시작시키도록 명령을 내려줍니다.
이제 다시 라즈베리파이를 재부팅 시켜보면 지정된 프로그램이 실행되는 것을 확인 할 수 있습니다.
sudo reboot
5번째방법: Crontab 사용
crontab은 리눅스에서 정해진 시간에 지정한 명령을 수행하는데 사용되는 데몬(일종의 백그라운드 프로그램)인 cron에서 사용하는 테이블입니다. crontab은 단순히 부팅과정에서 프로그램을 실행되도록 하는 것 외에도 '예를들어 매주 목요일 12시에 특정프로그램을 실행'하도록 지정할 수도 있습니다.
라즈베리파이에서 크론탭을 사용하려면 아래와 같은 단계를 따르면 됩니다.
1단계- 원하는 위치에 파일을 만듭니다.
저는 /home/pi/py_test.py 라는 파일을 만들어서 아래와 같이 간단한 문장을 출력하는 프로그램을 입력했습니다.
2단계- crontab을 엽니다.
sudo crontab -e
3단계- 부팅시 실행될 명령어를 @reboot 와 함께 맨 아래줄에 추가합니다.
@reboot sudo python3 /home/pi/py_test.py
이제 라즈베리파이를 다시 재부팅하면 위에서 지정한 파일이 실행되는 것을 확인 하실 수 있습니다.
sudo reboot
제언
여러분이 실행하고 싶으신 프로그램이 라즈베리파이의 부팅에서 순서가 중요하지 않은 프로그램이라면 위 5가지 방법중 어떤 방법을 사용하셔도 좋겠죠? 하지만 때로는 순서가 매우 중요한 경우가 있습니다. 예를 들어 네트워크 연결이 설정되어야만 작동이 가능한 프로그램이라던지, 아니면 특정 디렉토리가 마운트된 다음에 실행되어야 한다던지.... 등등.... 이럴 때는 프로그램이 실행되는 순서를 지정할 수 있는 init.d나 systemd의 방법을 사용하셔야 합니다. 왜냐하면 두 방법은 부팅과정에서 어떤 스크립트를 먼저 실행할지를 지정할 수 있기 때문입니다. 아무쪼록 이 포스팅이 누군가에게는 도움이 되셨기를 바랍니다. 그럼 이만^^
# CentOS release 6.9 (Final) # Linux dev-linux08 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux # Server version: Apache/2.4.6 (Unix) / Server built: Jan 9 2020 16:43:34 # Apache Tomcat/7.0.41
# /usr/local/tomcat7/bin/version.sh Using CATALINA_BASE: /usr/local/tomcat7 Using CATALINA_HOME: /usr/local/tomcat7 Using CATALINA_TMPDIR: /usr/local/tomcat7/temp Using JRE_HOME: /usr/java8 Using CLASSPATH: /usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7/bin/tomcat-juli.jar Server version: Apache Tomcat/7.0.41 Server built: Jun 6 2013 11:16:08 Server number: 7.0.41.0 OS Name: Linux OS Version: 2.6.32-696.el6.x86_64 Architecture: amd64 JVM Version: 1.8.0_202-b08 JVM Vendor: Oracle Corporation
[Apache2 서비스 등록]
1. Apache 의 실행 스크립트인 apachectl 을 /etc/init.d에 httpd라는 이름으로 복사 => apachectl은 Apache가 설치된 bin 디렉토리에 있다.
오대시티는 소리 편집기 가운데 하나다. 소스는 GNU 일반 공중 사용 허가서하에 배포된다. 그래픽 사용자 인터페이스는 wxWidgets를 이용한 것이다. 2000년 당시 카네기멜론 대학교의 대학원생이었던 Dominic Mazzoni가 창시하여 지금도 계속 관리하고 있다. 위키백과 라이선스: GNU 일반 공중 사용 허가서, 크리에이티브 커먼즈 라이선스 (문서화) 첫 출시: 2000년 5월 28일; 19년 전 크기: 62.5MB: 마이크로소프트 윈도우; 71.7MB: macOS; includes downloaded Manual 개발사: The Audacity Team 작성 언어: C++, C 플랫폼: IA-32, x86-64, 파워PC
11AC /5GHz, 2.4GHz Dual band / 2Tx-2Rx 867Mbps WiFi / MU-MIMO 기가비트 / DDR2 128MB / 3LAN 포트 유무선공유기 / 5dbi, 4ANT / USB 2.0 Network Storage Service with FTP, SAMBA, HTTP and ipDISK Media Server(DLNA) / 모바일 설치도우미 & iUX 제공
CPU
리얼텍 RTL8197F (1GHz)
WAN Interface
1 x 10/100/1000Mbps WAN - 케이블 자동 감지
LAN Interface
3 x 10/100/1000Mbps PC Port - 케이블 자동 감지 Jumbo Frame 지원 - 최대 9KByte
Wireless Interface
802.11 a/b/g/n/ac
Status LED
Power, CPU, WAN, LAN X 3, 2.4G Wireless, 5G Wireless
DRAM
DDR2 128 Mbytes
FLASH
16 Mbytes
안테나
5GHz 802.11ac/a/n ANT (2EA) 2.4GHz 802.11b/g/n ANT (2EA)
본체 크기 / 무게
174 x 137.5 x 33 mm (안테나크기 제외) / 316g
패키지 크기 / 무게
215 x 180 x 90 mm / 732g (제품 포장, 본체 및 구성품 전체의 무게 포함)
아일랜드인 아버지와 일본사무라이집안의 일본인 어머니 사이에서 태어났다. 대한민국 임시정부에서 연통제를 실시하게 되자일본영사관 경찰의 권한이 미치지 못하는이륭양행건물의 2층에임시정부 단둥 교통국의 연락사무소를 설치하도록 도왔으며, 이륭양행에서 경영하는 무역선을 이용하여 독립운동에 필요한 무기 운반, 군자금 전달, 독립운동가의 출입국,한국국내와 임시정부와의 연락 등 중요한 창구역할을 했으나,1920년7월에 내란죄로 일본 경찰에 체포되어 옥고를 치렸다.
김구가1919년봄에 동료 독립운동가 15명과 함께상하이로 망명할때도 이륭양행의 배편을 이용한 것으로 기록되어 있으며,1919년11월에는고종의 다섯째 아들인의친왕을 망명시키는 시도가 이루어지던 당시에도 단동 교통국이었던 이륭양행을 통해 의친왕의 망명 계획을 진행하였다. 독립운동가들을 숨겨주며상하이로 오가는 선편을 제공하는 한편,이륭양행의 사장인 본인의 이름으로 우편물의 왕래를 담당하였을 뿐 아니라, 무기수입의 편의까지 제공하였다.
조지 쇼는 또다른한국인독립운동 단체인의열단을 지원하기도 했는데,미국인인님 웨일즈가 쓴아리랑에서 독립운동가김산이 조지 쇼의 활약에 대하여 남긴 증언을 다룬, 다음과 같은 내용이 있다.
WinLux = Windows + Linux 합성어.
윈도우, 리눅스, 서버, Oracle 등 정보 수록. - 개인적으로 서버관련(서버솔루션, 서버장비, 스팸장비, 네트웍장비, 방화벽, 웹방화벽, DB암호화, Was모니터링솔루션 등)업무를 진행하고 있습니다. 업무중 궁금한 사항이나 관련사항에 대해 해결방법을 공유하고자 합니다.