0

我有一个 C++ 程序,它在启动时通过 cronjob(在 crontab 中)调用:

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

当 Pi 启动时,它会运行 logfileControl,因为它显示在正在运行的程序列表 (ps -e) 中。LogfileControl 包含对与SocketCAN相关的 C++ 程序的两个系统调用(SocketCAN 是 Linux 内核的一部分,它允许将 CAN 数据作为网络套接字处理)。我希望 logfileControl 在启动时运行,以便它可以初始化 CAN 套接字(系统调用 1),然后启动第一个日志文件(系统调用 2,candumpExternal,这是来自 socketCAN 的 candump,稍作修改以使日志文件成为特定位置而不是就在candump所在的位置,但使用原始版本有同样的问题)。第一个系统调用似乎工作正常,好像我再次尝试初始化套接字它很忙,但第二个系统调用似乎没有发生,因为根本没有创建日志文件,因为没有创建日志文件。如果我从命令行手动运行 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