나는 부분적인 용어 문제, 일부분은 보통 newb 문제, 일부는 읽기 문제에 지쳐 있다고 생각한다.
지금까지 내 가정의 에너지 모니터 프로젝트에서 SDR 라디오 작동, 데이터 디코딩, InfsonDB 로의 Json Push, Grafana 실행 및 그래프 가져 오기 등의 작업을 수행했습니다. 나는 라스베리 파이 / 오렌지 피 (OrangePi)를 가지고 노는 2 달 미만의 리눅스 경험을 가지고 있기 때문에 인터넷 검색을 통해 모두.
내 OrangePi가 Armbian 우분투를 실행합니다. 16.04
부팅 할 때 매우 간단한 “명령”이 필요합니다. 그것은 백그라운드에서 항상 실행됩니다. 그래서 데몬이되는 것 같아요?
명령은입니다.
/home/jonboy545/GoCode/bin/rtlamr -filterid=62059972 -format=json -msgtype=idm unique=true | rtlamr-collect
그게 전부 야. log_energy.sh라는 간단한 스크립트를 만들어 실행 가능하게 만들었습니다. 그것은 단지 :
#!/bin/bashr
/home/jonboy545/GoCode/bin/rtlamr -filterid=62059972 -format=json -msgtype=idm unique=true | rtlamr-collect;
./log_energy.sh를 터미널 창에 입력하면 모든 것이 잘 작동합니다. SCREEN 인스턴스를 열어야하므로 터미널을 열어 둘 필요가 없도록 분리 할 수 있습니다. 분명히 이것은 최선의 해결책이 아닙니다.
그래서, 이것을 rc.local에 넣었습니까? 몇 가지 문제가 있었지만 너무 빨리 실행되고 있다고 생각하여 잠을 60 번 시도했지만 여전히 산발적이었습니다. 때로는 효과가 있었지만 때로는 효과가 없었습니다.
그래서 나는 crontab을 사용하고 @reboot를 실행하도록 생각했습니다. 다시 말하지만, 아마도 최선의 해결책은 아닙니다. 또한 선언해야하고 ~ / .profile에 설정되어야하는 환경 변수가 있습니다. (나는 그들이 어디로 든 갈 수 있다고 생각합니다.) crontab이 내가 읽은 것 이상으로 그 환경 변수를 “읽습니다”는 것을 확신하지 못합니다.
그렇다면이 스크립트를 부팅 할 때 “적절한”방법은 무엇입니까 (어쩌면 모든 것이 “안정된”상태 일 것입니다.).
궁극적으로 나는 그것을 “에너지”라고 불리는 “서비스”로 갖고 싶다. 그래서 sudo 서비스 에너지 스타트 시작 / 정지 / 재시작을 할 수있다.
나는 /etc/init.d/skeleton과 /etc/init.d에 이미 존재하는 파일들을 살펴 봤지만, 내가 무엇을보고 있는지 잘 모르겠다.
누군가 올바른 방향으로 나를 조종 할 수 있습니까?
많은 감사합니다!
답변
문제의 일부는 시작시 응용 프로그램을 실행할 수있는 몇 가지 방법이 있다는 것입니다.
에이 악마 예전의 도스 TSR과 비슷합니다. 백그라운드에서 시작하고 실행되는 응용 프로그램입니다.
init 스크립트 (쓰기가 조금 복잡해지는 경향이 있음)로이를 수행하는 “고전적인”방법 -하지만이 방법은 다소 쓸모가 없거나 crontab은 문자 그대로 단지 한 번에 특정 작업을 실행하도록 설계된 것입니다.
그만큼 서비스 명령은 upstart를 가리키며, init 스크립트가 수행 한 작업을 처리하지만 16.04는 systemd로 대체됩니다. 그것은 upstart에서 전환하는 사람들을위한 systemd에 사용되지만 “service”를 “systemctl”로 대체 할 가치가 있습니다. 이는 똑같은 일을합니다.
systemd에 대한 스크립트를 작성하십시오.
왜? 그것의 지원, 그리고 장기적으로 될 것입니다. 그것은 꽤 합리적인 구문을 가지고있다. 문서도 사실 꽤 괜찮습니다.
또한 선언해야하고 ~ / .profile에 설정되어야하는 환경 변수가 있습니다. (나는 그들이 어디로 든 갈 수 있다고 생각합니다.) crontab이 내가 읽은 것 이상으로 그 환경 변수를 “읽습니다”는 것을 확신하지 못합니다.
당 시스템 워드 프로세서 (그리고 더 읽을 거리 – 이 AU 질문 , 우분투의 선적 서류 비치 )
환경 변수와 함께 라인을 추가 할 수 있습니다.
환경 = “ONE = 1” ‘TWO = 2 2’
특정 사용자 또는 특정 시간에 시작할 수도 있습니다. 자동으로 재시작 할 수도 있습니다.