RPi에서 동시에 실행 중인 두 프로그램을 중지하는 방법

RPi에서 동시에 실행 중인 두 프로그램을 중지하는 방법

두 개의 활성 라즈베리 파이가 있습니다. 그들은 모두 스크립트를 가지고 있습니다:adxl345test.py

이 스크립트는 가속도계에서 데이터를 수집합니다. 나는 일반적으로 하나의 RPi에서 스크립트를 시작한 다음 다른 RPi에서 스크립트를 시작합니다. 하나의 RPi에서 두 개의 RPi의 스크립트를 실행하고 있습니다. 이러한 방식으로 하나의 RPi는 자체 스크립트와 다른 RPi의 외부 스크립트를 실행하기 시작합니다.

sudo python adxl345test.py콘솔에 글을 쓰고 Enter를 눌러 각 RPi에서 스크립트를 트리거합니다. 시계는 PTPd와 동기화됩니다. RPi가 인터넷에 연결되어 있습니다.

하나의 명령을 통해 두 스크립트를 모두 실행합니다. 여기있어:

pi@Sensor1:~ $ sudo python adxl345test.py & sshpass -p 'password' ssh pi@ip sudo python adxl345test.py

sshpass( sudo apt-get install sshpass)를 사용하여 명령에 직접 비밀번호를 입력했습니다.

이제 데이터 로깅을 중단하고 싶습니다! 일반적으로 Ctrl+를 사용 C하지만 이는 하나의 RPi에서 단일 스크립트를 실행할 때만 작동합니다.

내가 찾고 있는 것은 RPi 콘솔에 단일 명령을 작성하여 스크립트를 중지하는 것입니다. 현재 정확도는 그다지 중요하지 않습니다.

아마도 다음 명령을 사용할 수 있을 것이라고 생각했습니다.

sudo killall python & sshpass -p 'password' ssh pi@ip sudo killall python---작업을 편집하세요!

이 명령은 두 RPi 모두 데이터 수집을 중지합니다. 한 RPi에서는 모든 것이 잘 작동하고 데이터가 올바르게 기록되지만, 다른 RPi에서는 어떤 이유로든 데이터를 전혀 기록하지 않습니다.

x초 후에 두 RPi가 데이터를 수집하는 것을 중지할 수 있기를 원합니다.

제가 실행하고 있던 스크립트에 중요한 정의가 누락된 것으로 나타났습니다. 이제 위의 killall Commando가 제대로 작동하고 데이터가 제대로 저장되었습니다.

답변1

첫째, SSH 공개 키 인증을 사용하여 원격 RPI를 통해 명령을 실행할 수 있는데 이는 매우 편리합니다. 메인 RPI(센서 1)에서 간단한 명령으로 이 작업을 수행할 수 있습니다. ssh-copy-id pi@ip설정을 원하시면 댓글로 도움을 드릴 수 있습니다.

아래 설명된 대로 "timeout"을 사용하여 정의된 기간 동안 스크립트를 실행할 수 있습니다.여기.

killall과 관련하여 해당 프로세스가 이미 실행 중이라고 확신합니까? 스크립트를 시작한 후 프로세스의 PID를 가져와서 pgrep -f adxl345test.pypid가 반환되는지 확인한 다음 이를 종료 kill <PID>하고 데이터를 얻는지 확인하세요.

관련 정보