10 个解决方案
#1
大致意思是说你操作的文件比较忙,可能别的进程在用。
#2
有解决方案嘛?
#3
关闭打开的文件
你应该贴出你的代码,这样你才有可能获得有效的帮助
你应该贴出你的代码,这样你才有可能获得有效的帮助
#4
#!/usr/local/bin/php
<?php
set_time_limit(0);
$acts=array('start','stop','status','prepare','help');
$config=array(
"dbhost"=>"localhost",
"dbuser"=>"xxx",
"dbpw"=>'xxx',
"dbname"=>"po",
"charset"=>"utf8",
);
$db=null;
$lock="lock.txt";
if(in_array($argv[1],$acts,true) ){
$argv[1]();
}else{
help();
}
function start(){
global $lock,$argc,$argv,$db;
if($argc===2){
if(status(true)=="starting\n"){
echo "program is also starting";
}else{
@unlink($lock);
$date=date("Y-m-d");
$log="log/$date.txt";
exec(__FILE__." start back >>$log 2>&1 &");//在后台运行
}
}elseif($argc===3&&$argv[2]==='back'){
$str="program is also starting\n";
if($fh=@fopen("starting.txt",'w+')){
if(flock($fh,LOCK_EX + LOCK_NB)){//只准运行一个实例
$db=get_db();
$str='';
while(1){
if(is_file($lock)){
break;
}
sendmail();
}
}
fclose($fh);
}
if($str){
echo $str;//报错
}
}else{
echo "starting error\n";
}
}
function sendmail(){
$db=get_db();
echo "$i\n";
usleep(1000000*1);//间隔0.2秒发一封,一秒发5封
}
function get_email_doamins($limit){
$db=get_db();
}
function prepare(){
$db=get_db();
}
/**
* 显示信息
*
*/
function status($r=false){
$str="stopping\n";
if($fh=@fopen("starting.txt",'w+')){
if(!flock($fh,LOCK_EX + LOCK_NB)){
$str= "starting\n";
}
fclose($fh);
}
if($r){
return $str;
}
echo $str;
}
function stop(){
global $lock;
file_put_contents($lock,'');
if(is_file($lock)){
echo "stoping\n";
}else{
echo "Error:stoping";
}
}
function help(){
global $acts;
foreach($acts as $act){
echo __FILE__." $act\n";
}
}
function get_db(){
global $config;
static $db=null;
if(is_null($db)){
$db=new DB($config);
}
return $db;
}
?>
#5
并不是每次都会出现错误.偶尔.
#6
./file_name start 会出现这个错误.
#7
关注中!
#8
搜了好多,没得到答案
是 不是这个问题
启动一个后台进程的问题.
exec(__FILE__." start back >>$log 2>&1 &");//在后台运行
是 不是这个问题
启动一个后台进程的问题.
exec(__FILE__." start back >>$log 2>&1 &");//在后台运行
#9
你这个代码是抄来的吧?
$lock="lock.txt";
本意是做文件锁,但代码中并没有体现
$lock="lock.txt";
本意是做文件锁,但代码中并没有体现
#10
晕... 这个完全手写的,
starting.txt是锁文件.这个lock.txt文件,控制进程暂停的.在stop()里面有实现啊.
starting.txt是锁文件.这个lock.txt文件,控制进程暂停的.在stop()里面有实现啊.
#1
大致意思是说你操作的文件比较忙,可能别的进程在用。
#2
有解决方案嘛?
#3
关闭打开的文件
你应该贴出你的代码,这样你才有可能获得有效的帮助
你应该贴出你的代码,这样你才有可能获得有效的帮助
#4
#!/usr/local/bin/php
<?php
set_time_limit(0);
$acts=array('start','stop','status','prepare','help');
$config=array(
"dbhost"=>"localhost",
"dbuser"=>"xxx",
"dbpw"=>'xxx',
"dbname"=>"po",
"charset"=>"utf8",
);
$db=null;
$lock="lock.txt";
if(in_array($argv[1],$acts,true) ){
$argv[1]();
}else{
help();
}
function start(){
global $lock,$argc,$argv,$db;
if($argc===2){
if(status(true)=="starting\n"){
echo "program is also starting";
}else{
@unlink($lock);
$date=date("Y-m-d");
$log="log/$date.txt";
exec(__FILE__." start back >>$log 2>&1 &");//在后台运行
}
}elseif($argc===3&&$argv[2]==='back'){
$str="program is also starting\n";
if($fh=@fopen("starting.txt",'w+')){
if(flock($fh,LOCK_EX + LOCK_NB)){//只准运行一个实例
$db=get_db();
$str='';
while(1){
if(is_file($lock)){
break;
}
sendmail();
}
}
fclose($fh);
}
if($str){
echo $str;//报错
}
}else{
echo "starting error\n";
}
}
function sendmail(){
$db=get_db();
echo "$i\n";
usleep(1000000*1);//间隔0.2秒发一封,一秒发5封
}
function get_email_doamins($limit){
$db=get_db();
}
function prepare(){
$db=get_db();
}
/**
* 显示信息
*
*/
function status($r=false){
$str="stopping\n";
if($fh=@fopen("starting.txt",'w+')){
if(!flock($fh,LOCK_EX + LOCK_NB)){
$str= "starting\n";
}
fclose($fh);
}
if($r){
return $str;
}
echo $str;
}
function stop(){
global $lock;
file_put_contents($lock,'');
if(is_file($lock)){
echo "stoping\n";
}else{
echo "Error:stoping";
}
}
function help(){
global $acts;
foreach($acts as $act){
echo __FILE__." $act\n";
}
}
function get_db(){
global $config;
static $db=null;
if(is_null($db)){
$db=new DB($config);
}
return $db;
}
?>
#5
并不是每次都会出现错误.偶尔.
#6
./file_name start 会出现这个错误.
#7
关注中!
#8
搜了好多,没得到答案
是 不是这个问题
启动一个后台进程的问题.
exec(__FILE__." start back >>$log 2>&1 &");//在后台运行
是 不是这个问题
启动一个后台进程的问题.
exec(__FILE__." start back >>$log 2>&1 &");//在后台运行
#9
你这个代码是抄来的吧?
$lock="lock.txt";
本意是做文件锁,但代码中并没有体现
$lock="lock.txt";
本意是做文件锁,但代码中并没有体现
#10
晕... 这个完全手写的,
starting.txt是锁文件.这个lock.txt文件,控制进程暂停的.在stop()里面有实现啊.
starting.txt是锁文件.这个lock.txt文件,控制进程暂停的.在stop()里面有实现啊.