我有一个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秒暂停,但这似乎没有任何作用。