每5秒执行一次php文件的Bash脚本
Bash脚本:每5秒执行一次php文件的Bash脚本,bash,shell,sh,Bash,Shell,Sh,Bash脚本: $ cat test.sh #!/bin/bash while true do /home/user/public_html/website.com/test.php sleep 5 done 我试着用cron来称呼它: * * * * * /home/user/public_html/website.com/test.sh 我的错在哪里?.sh位于何处重要吗 编辑: 我从上面解决了所有的问题。我还创建了此cron作业以防止多个进程: * * * * * flock -n
$ cat test.sh
#!/bin/bash
while true
do
/home/user/public_html/website.com/test.php
sleep 5
done
我试着用cron来称呼它:
* * * * * /home/user/public_html/website.com/test.sh
我的错在哪里?.sh位于何处重要吗
编辑:
我从上面解决了所有的问题。我还创建了此cron作业以防止多个进程:
* * * * * flock -n /tmp/test.lock /home/user/public_html/website.com/test.sh
现在的问题是bash每5秒执行一次php,这会创建多个进程,如:
user 12:31 /home/user/public_html/website.com/test.php
user 12:31 /home/user/public_html/website.com/test.php
user 12:31 /home/user/public_html/website.com/test.php
如何控制?我需要更改bash脚本,以便它能够检测是否正在执行PHP
这是否正确:
#!/bin/bash
while true
if [ "$(pidof test.php)" ]
then
echo "Running"
else
do
/home/user/public_html/website.com/test.php &
sleep 5
fi
done
您错过了将流程置于后台的
&
字符:
#!/bin/bash
while true
do
/home/user/public_html/website.com/test.php &
sleep 5
done
确保脚本是可执行的:
chmod +x /home/user/public_html/website.com/test.php
但是要将cron
与此脚本结合起来,有一种方法:
@reboot /path/to/script.sh
因为您只需要脚本的一个实例
如果
cron
不支持@reboot
,另一种可能是在/etc/rc.local
中添加一行,您错过了将进程置于后台的&
字符:
#!/bin/bash
while true
do
/home/user/public_html/website.com/test.php &
sleep 5
done
确保脚本是可执行的:
chmod +x /home/user/public_html/website.com/test.php
但是要将cron
与此脚本结合起来,有一种方法:
@reboot /path/to/script.sh
因为您只需要脚本的一个实例
如果
cron
不支持@reboot
,另一种可能是在/etc/rc.local
中添加一行,cron规则将每分钟执行一次脚本。每个脚本将继续运行一个无限循环。因此,最终将有许多过程
不幸的是,cron不允许比分钟更精细的粒度,因此您可以保留原有的方式,但添加一些锁定。锁定,在启动新脚本之前检查脚本是否尚未运行
你可以使用“flock”之类的东西,如果你已经安装了
$ flock --version
flock (util-linux 2.20.1)
让你的亲信如此:
# m h dom mon dow command
* * * * * flock -n /tmp/test.lock /home/user/public_html/website.com/test.sh
cron规则将每分钟执行一次脚本。每个脚本将继续运行一个无限循环。因此,最终将有许多过程 不幸的是,cron不允许比分钟更精细的粒度,因此您可以保留原有的方式,但添加一些锁定。锁定,在启动新脚本之前检查脚本是否尚未运行 你可以使用“flock”之类的东西,如果你已经安装了
$ flock --version
flock (util-linux 2.20.1)
让你的亲信如此:
# m h dom mon dow command
* * * * * flock -n /tmp/test.lock /home/user/public_html/website.com/test.sh
要使cron作业工作(可执行),请执行以下操作
要使bash脚本调用php
$ chmod +x /home/user/public_html/website.com/test.php
最后,您的php文件应该有一个shebang副本,将此代码粘贴到php文件的顶部
#!/usr/bin/php
或者如果没有shebang,您需要更改shell脚本调用
php /home/user/public_html/website.com/test.php
要使cron作业工作(可执行),请执行以下操作
要使bash脚本调用php
$ chmod +x /home/user/public_html/website.com/test.php
最后,您的php文件应该有一个shebang副本,将此代码粘贴到php文件的顶部
#!/usr/bin/php
或者如果没有shebang,您需要更改shell脚本调用
php /home/user/public_html/website.com/test.php
问题是cron通常不像用户那样具有相同的路径变量
您应该使用睡眠二进制文件“/bin/sleep”的完整路径。但是,正如其他用户所指出的,您的脚本每分钟都会生成一个脚本副本,这可能不是您所期望的。问题在于cron通常没有与您的用户相同的路径变量
您应该使用睡眠二进制文件“/bin/sleep”的完整路径。但是,正如其他用户所指出的,您的脚本每分钟都会生成一份脚本副本,这可能不是您所期望的。另一种解决方法是只运行脚本12次,然后将其放在crontab中
#!/bin/bash
for loop in 1 2 3 4 5 6 7 8 9 0 1 2; do
/home/user/public_html/website.com/test.php &
sleep 5
done
--或--
--更新--
如果您的目标不是拥有多个test.php,请使用以下脚本:(只运行一次,不要将其放在crontab中):
说明:此脚本调用test.php,并等待它终止(因为它最后没有
&
)。然后它测量时间:如果已经过了5秒,它会立即调用test.php。否则,它将休眠剩余的时间,以便在上一个测试开始后的5秒钟内调用next test.php。php另一种解决方法是只运行脚本12次,然后将其放在crontab中
#!/bin/bash
for loop in 1 2 3 4 5 6 7 8 9 0 1 2; do
/home/user/public_html/website.com/test.php &
sleep 5
done
--或--
--更新--
如果您的目标不是拥有多个test.php,请使用以下脚本:(只运行一次,不要将其放在crontab中):
说明:此脚本调用test.php,并等待它终止(因为它最后没有
&
)。然后它测量时间:如果已经过了5秒,它会立即调用test.php。否则,它将休眠剩余的时间,以便在上一次测试开始后的5秒内调用next test.php
步骤1=>在此路径中/usr/bin创建autocron.sh文件->vim autocron.sh
步骤2=>创建autocron.sh文件后->将此代码放入autocron.sh文件中,为true;开始日期+%s;php executablefile.php;结束=
date+%s;如果[$($end-$begin))-lt 5];然后睡眠$($begin+5-$end));fi;完成
->示例可执行PHP文件名和.sh文件应相同
步骤3=>然后保存autocron.sh文件
步骤4=>为autocron.sh文件授予权限->chmod+x autocron.sh
第5步=>并授予PHP文件->chmod+x PHP文件位置(executablefile.PHP)的权限
步骤5=>此命令将在后台进程中运行.sh文件,即使终端已关闭->nohup sh autocron.sh&
下面的代码我使用过linux¢ os服务器,它为我工作
步骤1=>在此路径中/usr/bin创建autocron.sh文件->vim autocron.sh
步骤2=>创建autocron.sh文件后->将此代码放入autocron.sh文件中,为true;开始日期+%s;php executablefile.php;结束=
date+%s;如果[$($end-$begin))-lt 5];然后