稍后在 PHP 中启动 bash 脚本
Start a bash script later in PHP
我试图稍后在 PHP 中启动一个 bash 脚本,所以我在 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 -j ACCEPT;
sudo iptables -D FORWARD -s -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 分钟后而不是现在开始。
在 removeuserIP
脚本中设置时间延迟是否可以接受?
#!/bin/bash
sleep 1m
sudo iptables -t nat -D PREROUTING -s -j ACCEPT;
sudo iptables -D FORWARD -s -j ACCEPT;
解决:最后查看/var/log/apache2/error.log,发现没有权限使用at.
事实上,您必须去 /etc/at.deny 并删除带有 at 的 www-date 行。默认情况下禁止它的原因可能是出于安全原因,并且有更好的方法可以做到这一点,但至少它是有效的。
我试图稍后在 PHP 中启动一个 bash 脚本,所以我在 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 -j ACCEPT;
sudo iptables -D FORWARD -s -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 分钟后而不是现在开始。
在 removeuserIP
脚本中设置时间延迟是否可以接受?
#!/bin/bash
sleep 1m
sudo iptables -t nat -D PREROUTING -s -j ACCEPT;
sudo iptables -D FORWARD -s -j ACCEPT;
解决:最后查看/var/log/apache2/error.log,发现没有权限使用at.
事实上,您必须去 /etc/at.deny 并删除带有 at 的 www-date 行。默认情况下禁止它的原因可能是出于安全原因,并且有更好的方法可以做到这一点,但至少它是有效的。