使用 php 检查 运行 个 cron 进程
Check running cron processes with php
当我执行
时得到以下结果
ps ax
13790 pts/0 S 0:00 /usr/bin/php cron3.php 0
13804 pts/0 S 0:00 /usr/bin/php cron3.php 1
13819 pts/0 S 0:00 /usr/bin/php cron3.php 2
13834 pts/0 S 0:00 /usr/bin/php cron3.php 3
13851 pts/0 S 0:00 /usr/bin/php cron3.php 4
13863 pts/0 S 0:00 /usr/bin/php cron3.php 5
13879 pts/0 S 0:00 /usr/bin/php cron3.php 6
13897 pts/0 S 0:00 /usr/bin/php cron3.php 7
13913 pts/0 S 0:00 /usr/bin/php cron3.php 8
13927 pts/0 S 0:00 /usr/bin/php cron3.php 9
13941 pts/0 S 0:00 /usr/bin/php cron3.php 10
13958 pts/0 S 0:00 /usr/bin/php cron3.php 11
13969 pts/0 S 0:00 /usr/bin/php cron3.php 12
13983 pts/0 S 0:00 /usr/bin/php cron3.php 13
13996 pts/0 S 0:00 /usr/bin/php cron3.php 14
14012 pts/0 S 0:00 /usr/bin/php cron3.php 15
14026 pts/0 S 0:00 /usr/bin/php cron3.php 16
14039 pts/0 S 0:00 /usr/bin/php cron3.php 17
14052 pts/0 S 0:00 /usr/bin/php cron3.php 18
14067 pts/0 S 0:00 /usr/bin/php cron3.php 19
14083 pts/0 S 0:00 /usr/bin/php cron3.php 20
14095 pts/0 S 0:00 /usr/bin/php cron3.php 0
14113 pts/0 S 0:00 /usr/bin/php cron3.php 1
我想只能保证1次,只有1个cron3.php [argv]可以运行.
意思是如果
cron3.php 1
正在 运行 过程中,我需要能够通过 php 行或其他内容知道它 运行 正在检查。
我试过谷歌搜索,我找到的最接近的是
exec("ps auxwww|grep cron3.php|grep -v grep", $output);
但是如果我把它改成
exec("ps auxwww|grep "cron3.php 1"|grep -v grep", $output);
它列出了所有包含 1 的内容,包括 10、11、12 等过程
谢谢
将其锚定到行尾:
exec("ps auxwww | grep '[c]ron3.php 1$'", $output);
使用 [c]ron3
是避免必须使用第二个 grep -v grep
的技巧,因为它匹配 cron3
,但不会匹配自身。
在 grep 模式的末尾放置一个 $
:
grep "cron3.php 1$"
在正则表达式中 $
表示 "end of text".
当我执行
时得到以下结果ps ax
13790 pts/0 S 0:00 /usr/bin/php cron3.php 0
13804 pts/0 S 0:00 /usr/bin/php cron3.php 1
13819 pts/0 S 0:00 /usr/bin/php cron3.php 2
13834 pts/0 S 0:00 /usr/bin/php cron3.php 3
13851 pts/0 S 0:00 /usr/bin/php cron3.php 4
13863 pts/0 S 0:00 /usr/bin/php cron3.php 5
13879 pts/0 S 0:00 /usr/bin/php cron3.php 6
13897 pts/0 S 0:00 /usr/bin/php cron3.php 7
13913 pts/0 S 0:00 /usr/bin/php cron3.php 8
13927 pts/0 S 0:00 /usr/bin/php cron3.php 9
13941 pts/0 S 0:00 /usr/bin/php cron3.php 10
13958 pts/0 S 0:00 /usr/bin/php cron3.php 11
13969 pts/0 S 0:00 /usr/bin/php cron3.php 12
13983 pts/0 S 0:00 /usr/bin/php cron3.php 13
13996 pts/0 S 0:00 /usr/bin/php cron3.php 14
14012 pts/0 S 0:00 /usr/bin/php cron3.php 15
14026 pts/0 S 0:00 /usr/bin/php cron3.php 16
14039 pts/0 S 0:00 /usr/bin/php cron3.php 17
14052 pts/0 S 0:00 /usr/bin/php cron3.php 18
14067 pts/0 S 0:00 /usr/bin/php cron3.php 19
14083 pts/0 S 0:00 /usr/bin/php cron3.php 20
14095 pts/0 S 0:00 /usr/bin/php cron3.php 0
14113 pts/0 S 0:00 /usr/bin/php cron3.php 1
我想只能保证1次,只有1个cron3.php [argv]可以运行.
意思是如果
cron3.php 1
正在 运行 过程中,我需要能够通过 php 行或其他内容知道它 运行 正在检查。
我试过谷歌搜索,我找到的最接近的是
exec("ps auxwww|grep cron3.php|grep -v grep", $output);
但是如果我把它改成
exec("ps auxwww|grep "cron3.php 1"|grep -v grep", $output);
它列出了所有包含 1 的内容,包括 10、11、12 等过程
谢谢
将其锚定到行尾:
exec("ps auxwww | grep '[c]ron3.php 1$'", $output);
使用 [c]ron3
是避免必须使用第二个 grep -v grep
的技巧,因为它匹配 cron3
,但不会匹配自身。
在 grep 模式的末尾放置一个 $
:
grep "cron3.php 1$"
在正则表达式中 $
表示 "end of text".