아래 링크에 잘소개 되어 있다.

https://www.digikey.kr/en/maker/projects/how-to-run-a-raspberry-pi-program-on-startup/cc16cb41a3d447b8aaacf1da14368b13

 

How to Run a Raspberry Pi Program on Startup

How to Run a Raspberry Pi Program on Startup Courtesy of Sparkfun Introduction The Raspberry Pi is a great single board computer, but like most computers, its functions rely mostly on human input. That means whenever you start up (or boot) your computer, i

www.digikey.kr

 

라즈베리 파이는 rc.local에 exit0 이전에 실행하고자 하는 명령어를 쓰면 잘된다.

그런데 python 스크립트나 node의 경우는 라이브러리 경로를 잘 명시해야 한다.

node의 경우 npm이 프로젝트 경로에 모아서 주니까 문제가 없는데 파이썬의 경우

기본적으로  rc.local이 root로 실행하기 때문에 아무런 PATH 설정이 없어서 library를 못찾는다.

따라서 pi 계정으로 실행하도록 해야 한다.

 

$ sudo vi /etc/rc.local

~~~

sudo -H -u pi python <my script path>

exit 0

 

이런식으로 실행해야 라이브러리를 찾는데 문제가 없을 것이다.

만약에 rc.local이 활성화 되지 않았다면 systemd를 이용해서 이를 활성화 해야한다.

http://blog.naver.com/PostView.nhn?blogId=kick8888&logNo=220922201750&beginTime=0&jumpingVid=&from=search&redirect=Log&widgetTypeCall=true

 

우분투 16.10 (systemd) 기반의 rc.local 활성화

우분투 최신버전은 systemd 기반으로 PID들이 관리된다, 필자는 rc.local을 부득이 하게 사용할 일이 생...

blog.naver.com

 

$ crontab -e

가장 편한 에디터를 선택한다 그냥 vim으로 하는게 무난

 

맨끝에다가

@reboot /home/simon/test.sh

 

리부팅 하면 끝,

 

근데 디버깅이 필요하면 로그를 봐야한다.  이때는 

 

@reboot /home/simon/test.sh >> /home/simon/test.log 2>&1

2>&1은 stderr를 stdout로 리다이렉션하라는 옵션임. 즉 모든 출력을 로그파일로 저장하라는 것임.

우분투 16.04를 설치하고 와이파이를 세팅하다가 아래와 같은 좋은 링크를 발견했다.

Wpa_supplicant로는 잘되었는데 이상하게 부팅시 자동실행은 잘 안되었다.

https://www.linuxbabe.com/command-line/ubuntu-server-16-04-wifi-wpa-supplicant

 

Using WPA_Supplicant to Connect to WPA2 Wi-fi from Terminal on Ubuntu 16.04 Server - LinuxBabe

In this tutorial, we are going to learn how to connect to Wi-fi network from the command line on Ubuntu 16.04 server and desktop using wpa_supplicant.

www.linuxbabe.com

그래서 삽질 끝에 부팅로그에서 systemd가 실행 실패하는 것을 보고 찾다보니 실행 속성을 줬어야 했다.

상기 링크 중에 wpa_supplicant를 systemd로 부팅시 자동실행하는 스크립트는 example에서 복사하는 부분이 있는데.

 

$ sudo cp /lib/systemd/system/wpa_supplicant.service /etc/systemd/system/wpa_supplicant.service

이렇게 실행 속성까지 추가해야 한다.

$ chmod +x /etc/systemd/system/wpa_supplicant.service

그리고 dhclient.service 스크립트도 만들고 나서 실행 속성을 주어야한다.

$ sudo nano /etc/systemd/system/dhclient.service

$ sudo chmod +x /etc/systemd/system/dhclient.service

 

그리고 중요한 부분이  ifconfig 해서 wifi network interface가 부팅시 자동으로 활성화가 되어 있어야 하는데

$ ifconfig

....
wlp2s0    Link encap:Ethernet  HWaddr 
          inet addr:192.168.0.111  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::b682:feff:fe8f:f52c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:620 errors:0 dropped:0 overruns:0 frame:0
          TX packets:211 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:80781 (80.7 KB)  TX bytes:31352 (31.3 KB)

 

 

상기의 wlp2s0가 저의 컴터 와이파이 인터페이스 인데 이것을 /etc/network/interface에서 자동활성화 하고 ssid/psk 까지 정보를 주어야 한다.

$ sudo vi /etc/network/interface

 

그냥 ""없이 타이핑하면 된다. 아참 그전에 재부팅할때 오래 걸릴 수 있으니 아래 타임아웃을 기존 300초에서 10~15초로 300초면 5분이다. 네트웍 안잡히면 5분을 멍하니 기다려야 한다 ^^;; 아래처럼 줄여준다.

$ sudo vi /etc/dhcp/dhclient.conf

 

timeout = 10 # 300 -> 10~15

 

+ Recent posts