Почему я не могу использовать execl () для запуска bash-скрипта? - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь запустить 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. Я должен быть в состоянии проверить это, прочитав файл журнала, но он никогда не обновляется, когда я нажимаю кнопку веб-сайта.

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

Ответы [ 2 ]

1 голос
/ 29 мая 2019

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

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

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

0 голосов
/ 30 мая 2019

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

...