У меня есть программа на C ++, которая вызывается при запуске через cronjob (в crontab):
@reboot sudo /home/pi/CAN/RCR_datalogging/logfileControl
Который запускает logfileControl каждый раз, когда загружается Pi, как показано в списке запущенных программ (ps -e). LogfileControl содержит два системных вызова программ на C ++, связанных с SocketCAN (SocketCAN является частью ядра Linux, он позволяет работать с данными CAN в качестве сетевых сокетов). Я хочу, чтобы logfileControl запускался при запуске, чтобы он мог инициализировать сокет CAN (системный вызов 1), а затем запустить первый файл журнала (systemcall 2, CandumpExternal, это Candump из socketCAN с незначительной модификацией, чтобы сделать файл журнала в определенном месте, а не просто где 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-секундную паузу в начале программы, но это, похоже, не имело никакого значения.
Задача ещё не решена.
Других решений пока нет …