繁体   English   中英

稍后在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 $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分钟后开始而不是现在。

removeuserIP脚本中removeuserIP时间延迟是否可以接受?

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

解决方案:最后,在检查/var/log/apache2/error.log后,我发现它没有使用权限。

实际上你必须去/etc/at.deny并用at删除www-date行。 可能有一个安全原因,为什么默认情况下禁止它,以及更好的方法来做到这一点,但至少它是有效的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM