虚拟主机支持定时任务吗?
作者:小编
日期:2025-05-14
点击:889
属于:技术动向
https://www.west.cn/docs/436389.html
问:虚拟主机支持定时任务吗?,虚拟主机支持定时任务吗?
答:您好,虚拟主机不支持定时任务,建议选购云服务器支持设置定时任务 ,云服务器限制较少,可以任意设置服务器环境 ,
非常感谢您长期对我司的支持,谢谢!
https://www.cnblogs.com/zjl8455482/p/9521194.html
php虚拟主机下实现定时任务,便宜方法
思路:因为是虚拟主机 不是真正的主机 如果是真正的主机 那么可以考虑的办法相当的多 也无需像我这样费尽心机 比如可以用主机系统的计划任务来定时执行某些数据库操作 也可以用mysql的超级管理员的一些功能来实现定时任务 。百度了下 获得了一些基本思路 这些思路无非就是使用 ignore_user_abort(); //函数设置与客户机断开是否会终止脚本 set_time_limit(0); 实现一个无限死循环 在这个死循环里面 我们可以通过sleep进行适当的延迟间隔 来进行一定的操作 但是当我实际的来写代码的时候发现一些原来没有考虑过的问题
<?php ignore_user_abort(); //函数设置与客户机断开是否会终止脚本的执行 set_time_limit(0); // 来设置一个脚本的执行时间为无限长 date_default_timezone_set('PRC'); // 切换到中国的时间 $interval=20;//间隔多久执行一次 $timed_task_config_path="timed_task_config.txt";//负责让这个无限循环停止的一个开关 其实是控制定时任务机制的一个配置文件 如果该文件不存在或者 里面的内容为close 那么定时任务不会执行 如果为open 则会开启一个无限循环来进行监控和执行定时任务 ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>定时任务</title> </head> <body> <?php //问题1 如何控制这些无限循环让他们停止 //问题2 如何避免打开多个无限循环增加服务器的资源消耗 //问题3 无限循环的日志监控和避免无限增加的处理办法 //控制用txt //php定时计划任务 //检测定时任务的配置文件 是否存在或者里面的内容 //strpos($str1,"open") if(file_exists($timed_task_config_path)) { //存在配置文件 开始检测里面的内容 $str1=""; $str1=trim(file_get_contents($timed_task_config_path)); if (is_numeric(strpos($str1,"open"))) { ////1.内容为open 表示当前已经有定时任务线程在运行了 就不再额外执行定时任务 send_timed_task_log("已经有一个定时任务进程存在 不能开启其他的进程"); exit("已经有一个定时任务进程存在 不能开启其他的进程"); } elseif (is_numeric(strpos($str1,"close"))) { ////2.内容为close表示要求定时任务关闭 更不用 send_timed_task_log("配置文件要求关闭所有定时任务进程"); exit("配置文件要求关闭所有定时任务进程"); } else { ////3.如果不是open 和close 那么就锁定该文件然后修改里面的内容为open 修改成功 $fp = fopen($timed_task_config_path, 'w+'); if(!is_writable($timed_task_config_path)){ send_timed_task_log("无法写入配置文件 请刷新重试"); exit("<p>无法写入配置文件 请刷新重试</p>"); } flock($fp, LOCK_EX); fwrite($fp, 'open'); sleep(1); flock($fp, LOCK_UN); fclose($fp); //////////如果再次读取下配置文件内容判断是否写入成功 成功则开始执行后面的无限循环 不成功提示并结束网页 $str1=""; $str1=trim(file_get_contents($timed_task_config_path)); // echo "<p>".$str1." </p>"; // echo "<p>".strpos($str1,"open")." </p>"; // exit(); if (is_numeric(strpos($str1,"open"))) { ///////////////修改成功 获取到了定时任务进程的权利 send_timed_task_log("启动成功 请关闭网页"); do{ $body=""; if (file_exists($timed_task_config_path)) { $body = trim(file_get_contents($timed_task_config_path)); if (is_numeric(strpos($body,"close"))) { send_timed_task_log("配置文件要求关闭所有的定时任务"); exit("<p>配置文件要求关闭所有的定时任务</p>"); } } else { send_timed_task_log("没有找到定时任务配置文件"); exit("<p>没有找到定时任务配置文件 进程结束</p>"); } //-----------------------定时操作开头------------------------------- send_timed_task_log("<常规检测:一切正常>"); //-----------------------定时操作结尾------------------------------- sleep(rand($interval-2,$interval+2)); // 函数延迟代码执行若干秒 为了避免完全一样 随机下间隔避免一些问题 }while(true); }else{ send_timed_task_log("没有获取到定时任务进程的权限 请刷新重试"); exit("没有获取到定时任务进程的权限 请刷新重试"); } } }else{ send_timed_task_log("定时任务配置文件不存在 不执行该"); exit("<p>定时任务配置文件不存在 不执行该任务</p>"); } //用来发送定时任务日志的函数 function send_timed_task_log($str) { //接收从脚本传递来的日志信息 判断当前的日期 把这个日志信息存储到当前日期命名的日志文件里 if (trim($str)<>""){ $nowtimefilepath="timed_task_".date("y-m-d",time()).".log"; $send_str=date("y-m-d",time()); $send_str=date("Y-m-d H:i:s",time())."----".trim($str)."\r\n"; file_put_contents($nowtimefilepath,$send_str,FILE_APPEND);// }else{ } } ?> </body> </html>
上一动态:JetBrains 远程开发,
下一动态:从淘宝购买程序模板,小程序,商