Я пытаюсь запустить скрипт bash с кнопки веб-сайта на Raspberry Pi, где скрипт находится в home / pi /. Фрагмент кода ниже показывает мое текущее решение. Всякий раз, когда нажимается кнопка веб-сайта, он вызывает этот блок кода в файле c.

else if(strcmp(argv[1],"SelfTest") == 0)
    {
        char *command = "/bin/bash";
        char name[40];
        strcpy(name, "home/pi/SelfTest.sh");
        execl(command, command, name, NULL);
        return 0;
    }

Я запускаю это на Raspberry Pi 3+, скрипт, который я запускаю, имеет разрешения 777 и принадлежит pi: www-data, если это поможет.

Я проверил, действительно ли вызывается блок IF, просто создав пустой каталог с именем «TEST». Нижний фрагмент кода показывает, как я подошел к этому. Кажется, это работает без проблем (как только я нажимаю кнопку на веб-сайте, я вижу «home / pi /» и появляется новая папка «TEST»). К сожалению, когда я запускаю верхний фрагмент кода (для запуска SelfTest.sh), скрипт не запускается (сам скрипт должен записывать вывод в файл журнала с отметкой времени, а нажатие кнопки не обновляет метка времени. Метка времени обновляется только когда я запускаю скрипт из терминала)

else if(strcmp(argv[1],"SelfTest") == 0)
    {
        char *command = "/bin/mkdir";
        char name[40];
        strcpy(name, "/home/pi/TEST");
        execl(command, command, name, NULL);
        return 0;
    }

Каждый раз, когда я нажимаю кнопку веб-сайта, должно происходить то, что на нем должен запускаться SelfTest.sh. Я должен быть в состоянии проверить это, прочитав файл журнала, но он никогда не обновляется, когда я нажимаю кнопку веб-сайта.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация!

0
N. Sunilkumar 29 Май 2019 в 22:56

2 ответа

Лучший ответ

Видимо, я очень неуклюжий и не понимал, что мне не нужен удар. Я изменил 'char * command = "/ bin / bash";' to 'char * command = "/ bin / sh";' и скрипт запускался как положено!

0
N. Sunilkumar 30 Май 2019 в 15:19

Если только вы не запускаете это из /, в этой строке отсутствует косая черта перед home:

strcpy(name, "home/pi/SelfTest.sh");

Кроме того, execl никогда не вернется. Вы можете посмотреть информацию о шаблонах fork() и exec().

1
contrapants 29 Май 2019 в 20:02