linux — запустить скрипт bash позже в переполнении стека

Я пытаюсь запустить скрипт bash позже в PHP, поэтому я разрешил это в visudo.

www-data ALL = (root) NOPASSWD: /sbin/iptables
www-data ALL = (root) NOPASSWD: /usr/bin/at

Сценарий removeuserIP просто делает sudo iptables … и работает:

#!/bin/bash
sudo iptables -t nat -D PREROUTING -s $1 -j ACCEPT;
sudo iptables -D FORWARD -s $1 -j ACCEPT;

и в коде PHP я поставил эту строку:

$msg=exec("echo /var/www/scripts/removeuserIP $ipaddress | at now + 1 minutes");

но проблема в том, что он запускает скрипт прямо сейчас. я зарегистрировалась /log/var/auth.log и действительно, он запускает команду прямо сейчас.

Я попробовал это в терминале напрямую, и не было никакой проблемы, это начинается позже (с аргументом конечно):

echo /var/www/scripts/removeuserIP $ipaddress | at now + 1 minutes

Я также попытался сделать это в терминале, но этот тоже не работает, потому что он не понимает, что для файла есть аргумент:

sudo at now +1 minutes -f /var/www/scripts/removeuserIP 172.24.1.115

Я действительно не понимаю, почему это начинается прямо сейчас, даже если это должно начаться через 1 минуту, а не сейчас.

1

Решение

Было бы приемлемо поставить задержку в removeuserIP скрипт?

#!/bin/bash
sleep 1m
sudo iptables -t nat -D PREROUTING -s $1 -j ACCEPT;
sudo iptables -D FORWARD -s $1 -j ACCEPT;
0

Другие решения

Решение: Наконец, после проверки /var/log/apache2/error.log я увидел, что у него нет разрешения на использование в.

Фактически вы должны перейти в /etc/at.deny и удалить строку www-date с at. Вероятно, есть причина безопасности, почему это запрещено по умолчанию, и лучший способ сделать это, но по крайней мере это работает.

0

По вопросам рекламы [email protected]