0

起動時にcronjob(crontab内)を介して呼び出されるC++プログラムがあります:

@reboot sudo /home/pi/CAN/RCR_datalogging/logfileControl

実行中のプログラムのリスト(ps -e)に表示されるため、Piが起動されるたびにlogfileControlが実行されます。LogfileControl には、 SocketCANに関連する C++ プログラムへの 2 つのシステム コールが含まれています。(SocketCAN は Linux カーネルの一部であり、CAN データをネットワーク ソケットとして扱うことができます)。起動時に logfileControl を実行して、CAN ソケット (システム コール 1) を初期化し、最初のログ ファイル (システム コール 2、candumpExternal、これは socketCAN からの candump であり、ログ ファイルをcandump はどこにありますが、元のバージョンを使用しても同じ問題がありました)。最初のシステムコールは、ソケットを再度初期化しようとしているかのように正常に動作しているようですが、ログファイルが作成されていないため、ログファイルがまったく作成されていないため、2 番目のシステムコールは発生していないようです。コマンドラインから logfileControl を手動で実行すると、期待どおりに動作し、ログファイルが作成されるため、かなり混乱しました...

ここで何が起こっているかについての洞察を持っている人はいますか?

system("sudo /sbin/ip link set can0 up type can bitrate 500000"); 
                                  // This is ran initially as logging should start as soon as the pi is on
system("/home/pi/CAN/RCR_datalogging/candumpExternal can0 -l -s 0"); // candump with the option to log(-l) as well as 
                                  // continue to output to console (-s 0)

std::cout <<"Setup Complete" << std:: endl;

while(true) { //sleeping indefinitely so that the program can stay open and wait for button presses
    sleep(60);
}

編集:プログラムの最初に5秒間の簡単な一時停止を追加しようとしましたが、これは何の違いもないようでした.

4

0 に答える 0