두 개의 활성 라즈베리 파이가 있습니다. 그들은 모두 스크립트를 가지고 있습니다: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.py
pid가 반환되는지 확인한 다음 이를 종료 kill <PID>
하고 데이터를 얻는지 확인하세요.