本文目录一览:
- 1、thinkphp框架里怎么用linux的crontab写php的定时脚本
- 2、Php cli是守护进程的吗
- 3、我需要用api从别的地方获取大量数据,然后存数据库,现在有70多万条数据,直接php获取过来服务器就爆了
- 4、如何使用Ubuntu中的Crontab定时执行PHP文件
- 5、如何用php作Linux自动执行脚本?
- 6、如何使用Linux的Crontab定时执行PHP脚本的方法
thinkphp框架里怎么用linux的crontab写php的定时脚本
键入 crontab
-e 编辑crontab服务文件
------------------------------------------Ubuntu中的linux---------------
安装lynx包:apt-get isntall lynx
先写ln.sh脚本:lynx
设置定时:crontab -e
0 1 * * * bash /var/www/test/ln.sh
-------------------------------------------------------------------------
分为两种情况:
第一种情况:你的php脚本中没有引入其他PHP文件,也就是说没有include,require_once等命令的PHP文件
* */1 * * * /usr/local/php/bin/php
/var/www/html/wwwroot/web/script.php (每一小时执行一次script.php)
注意,这样写需要把PHP变成可执行的脚本文件。在命令行下,脚本所在目录
chmod +x script.php
注意:你的script.php文件中一定要在开始处加上: #!/usr/local/php/bin/php -q
,下面是一个完整的script.php文件代码
?php
#!/usr/local/php/bin/php -q
session_start();
define( "DB_PASSWORD", "111111" ); //服务器登陆密码。这里我写不完,去后盾人看看相关视频你就会了,希望能帮你解决问题。
Php cli是守护进程的吗
php_cli模式简介
php-cli是php Command Line Interface的简称,如同它名字的意思,就是php在命令行运行的接口,区别于在Web服务器上运行的php环境(php-cgi, isapi等) 也就是说,php不单可以写前台网页,它还可以用来写后台的程序。 PHP的CLI shell脚本适用于所有的PHP优势,使创建要么支持脚本或系统甚至与GUI应用程序的服务端!——注:windows和linux下都支持php_cli模式 -crontabphp多线程
PHP-cli应用场景:
1.多线程应用
这方面的好处,引用鸟哥的话:
优点:
1. 使用多进程, 子进程结束以后, 内核会负责回收资源
2. 使用多进程,子进程异常退出不会导致整个进程Thread退出. 父进程还有机会重建流程.
3. 一个常驻主进程, 只负责任务分发, 逻辑更清楚.
php的多线程—没错就是php多线程应用,虽然大家都普遍认为php没有多线程(curl属于模拟多线程而不是真实的),但是在php_cli模式下的php彻底的是属于多线程。这个时候php属于linux的一个守护进程。 在本人之前写过的《PHP多线程批量采集下载美女图片(续)》的时候在采集程序里虽然使用curl来模拟多线程,但是在浏览器执行的时候也是会遇到执行超时或内存abort而导致程序中断,(要尝试几次才可以彻底成功),但是如果在php-cli模式下执行,你就会发现这个程序执行的很快,php多线程执行的优势被彻底表现出来了. -crontabphp多线程
备注:这种多线程方式不是很成熟,不适合大规模的生成应用,偶尔使用还是可以的
2.定时执行php程序
利用linux的cron方式,那么这个方式是如何定时执行php程序?请看下文
3.开发桌面程序
你可以做您的Windows或Linux中使用PHP的图形用户界面(GUI)应用!所有你需要的是PHP的命令行接口和一包GTK。这将允许建立真正的便携式图形用户界面应用程序(呵呵,之前只是知道php可以做桌面程序,现在才知道是使用php_cli模式),并且不需要学习别的。 -crontabphp多线程
4.编写PHP的shell脚本
如果你不会bash shell或者Perl等的使用,但是你又需要一些脚本去执行的时候,怎么办?这个时候你完全可以使用你熟悉的php编写shell脚本,这个时候你是不是突然感觉PHP是不是太强大了!—–真正做到一种语言,到处开发! -crontabphp多线程
PHP_CLI使用方法
win下面的执行方法:
假设php.exe 在D:xamppphp在dos命令在可以这个执行:
复制代码 代码如下:D:\xamppphpphp.exe D:\xampphtdocstest.php
就可以执行test.php这个文件了 。这里推荐win平台下xampp集成环境,真正比wamp强大N倍,这个集成包可以直接进入dos模式。
linux下php_cli使用
首先找到你安装php的路径,以我为例:
php安装在路径/usr/local/php/bin/php下
复制代码 代码如下:/usr/local/php/bin/php /usr/local/apache/htdocs/a.php
就可以执行a。php文件
PHP_CLI编程需知
如何检测环境支持php_cli模式?
复制代码 代码如下:
?php
//方法1
if (PHP_SAPI === 'cli')
{
// ...
}
//方法2
if (php_sapi_name() === 'cli')
{
// ...
}
PHP_ClI如何接收参数?
默认情况下/usr/local/php/bin/php接收参数是$argv,这个变量是固定的!在php文件中var_dump($argv);
得到下面结果:
可以写个简单的处理函数把这个方式转化为大家常用的GET/post的参数模式。
简单代码:
复制代码 代码如下:
?php
function parseArgs($argv){
array_shift($argv);
$out = array();
foreach ($argv as $arg){
if (substr($arg,0,2) == '--'){
$eqPos = strpos($arg,'=');
if ($eqPos === false){
$key = substr($arg,2);
$out[$key] = isset($out[$key]) ? $out[$key] : true;
} else {
$key = substr($arg,2,$eqPos-2);
$out[$key] = substr($arg,$eqPos+1);
}
} else if (substr($arg,0,1) == '-'){
if (substr($arg,2,1) == '='){
$key = substr($arg,1,1);
$out[$key] = substr($arg,3);
} else {
$chars = str_split(substr($arg,1));
foreach ($chars as $char){
$key = $char;
$out[$key] = isset($out[$key]) ? $out[$key] : true;
}
}
} else {
$out[] = $arg;
}
}
return $out;
}
var_dump($argv);
var_dump(parseArgs($argv));exit;
执行结果:
当然实现的方法不止一个,大家可以尝试其他方法实现!
例外关于php的cli还有很多参数可以加入:具体可以参考:
关于定时执行
cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业,周期性作业,比如备份数据 打开/etc/crontab,添加:
复制代码 代码如下:
/usr/bin/php -f /data/htdocs/test.php
我需要用api从别的地方获取大量数据,然后存数据库,现在有70多万条数据,直接php获取过来服务器就爆了
根据需求选合适的方法咯:
比如等数据用到时再获取,数据库相当于缓存,第一次用到时,你的数据库里面必然没有这条数据,这时就用api从别的地方获取,并缓存到数据库中,以后用到时就直接从数据库里获得了
定时定量获取,将性能分散化,比如100ms定时获取一条数据,这样cpu和内存会一直维持在较低水平,几乎不会影响性能。
服务器空闲期间多获取,忙的时间少获取,比如检测到cpu利用率小于50%,这段时间就快速同步,利用率大于90%,就停止同步
上面三条结合使用,再加上多线程,cpu利用率低就将定时器时间设的短一些,线程多一些,利用率高就设的长一些,线程少一些。无论何时,当用到某条数据时,用1的方法同步
如何使用Ubuntu中的Crontab定时执行PHP文件
先确认自己在LINUX Ubuntu 服务器上php的安装模式,以CGI 模块还是Apache模块方式安装? 如果不确定php安装模式,可以使用 phpinfo() 函数查看:将?php phpinfo(); ? 写在php文件中上传到网站服务器,访问该页面,就在页面顶部我们找到“Server API”,如果类似“Apache 2.0 Handler”,那么就是apache模块;否则php是CGI 模式(shell 命令行模式)。这两种不同的php安装模式,正对应于前面介绍的ubuntu crontab 定时执行php的两种解决方法。-crontabphp多线程
CGI 编译
如果Server API是cgi,那么在需要cron执行的php脚本的第一行额外加入一段代码#!/usr/bin/php -q(类似PERL语法),指定服务器中php可执行程序的位置,具体步骤如下:
1. 确认Ubuntu系统已经安装了php5-cli模块,安装命令:apt-get install php5-cli。在目录 /usr/bin/php下生成 php可执行程序。
2. 编辑待定时执行的php脚本文件crontab.php,如:
#!/usr/bin/php -q
?php
$file = “/var/www/”.date(‘H’).’_’.date(‘i’).’_’.date(‘s’).’.txt’;
file_put_contents($file,date(‘Y-m-d’));
?
3. 编辑 crontab 任务:
打开终端,输入命令:crontab -e,
Select an editor. To change later, run ‘select-editor’.
1. /bin/ed
2. /bin/nano —- easiest
3. /usr/bin/vim.tiny
选择一个Ubuntu编辑器后,编辑/tmp/crontab.AuN7IQ/crontab 文件:
# m h dom mon dow command
在下面添加定时执行命令:
* * * * * php /path/to/your/cron.php
5个星号分别代表定时指定每分、小时、日、月、周。如每天的下午7点执行crontab.php,命令为:
* 19 * * * php /var/www/cron/crontab.php
然后按Ctrl+O保存,Ctrl+X退出。
4. 执行以下Crontab命令行
Shell crontab crontab
确认crontab.php的权限为可执行("chmod 755 /var/www/cron/crontab.php")。
Apache 模块
如果php安装是以 apache 模式运行的,那么在要在ubuntu服务器定时执行的php脚本开头就不用加 #!/usr/bin/php -q 这一行。php脚本在ubuntu 通过crontab的定时执行通过Lynx浏览器的自动访问来完成。-crontabphp多线程
1. Lynx浏览器安装。
Lynx浏览器是一款轻便的web浏览器,使用于大部分Unix 和Linux系统环境。安装命令:sudo apt-get install lynx。
2. 编辑cron任务,命令crontab -e
如何用php作Linux自动执行脚本?
如何用PHP作Linux自动执行脚本? 在安装PHP的时候,会产生一个可执行文件,文件名为PHP.将它 copy 到 /usr/local/bin 下.在终端方式执行PHP程序: PHP -q onlinnum.PHP PHP 原本是应用在网页应用的﹐因此它会送出 HTML 的HEADER﹐但是在此我们是要将 PHP 用作 Shell Script﹐-q 就是表示不要送 出 HEADER 的意思.你可以试试看不加上 -q 的显示结果。此时你已经可以在终端方式下执行PHP 代码了。 linux命令:cron daemon 这是一个系统中常驻的服务,功能在于执行例行性的工作,如每天一次或每月一 次检查磁盘。cron daemon 会在每分钟检查一次排定的工作表(crontab),看看是否有要执行的指令,所有的输出会以mail寄给用户。 设置crontab 命令:crontab -e 该命令呼叫vi编辑器来编辑执行的清单。例如 0 0 1,15 * * fsck /home 1 * * * * /home/myhome/printhello 每一行代表一项排定的工作,在指令前为排定的时间,总共有5个栏位,以空格间隔,由左到右依序如下: -------------------------- 分钟 从00到 99 点钟 从0到 24 日从01到31 月从01到12 星期 从01到07,代表星期一到星期日 *号表示每 ,如每天执行,就在第三栏填*号 -------------------------- 所以上例的两项工作是: 每月1号和15号检查/home 磁盘 每小时的第一分执行 /home/myhome/printhello 这个文件 查看crontab:crontab -l 删除crontab:crontab -r 我们就知道该怎么利用PHP和crontab命令作Linux自动执行脚本了。 还需要注意什么问题? 如果PHP中有使用数据库,如oracle等,执行脚本中还需export Oracle的环境设置。-crontabphp多线程
如何使用Linux的Crontab定时执行PHP脚本的方法
*/1 * * * * /usr/local/php/bin/php /home/wwwroot/clewx/web/linux.php Crontab Dingdian op 14186
这是我服务器上的crontab粘贴给你了。
1、*/1是代表每分钟。
2、/usr/local/php/bin/php 是php脚本。意思就是拿PHP去执行,跟拿迅雷下载东西一个道理,都是需要指定一个东西去执行。
3、/home/wwwroot/clewx/web/linux.php 是php程序
4、Crontab Dingdian op 14186 是4个参数,因为我的程序是MVC的,所以执行的是Crontab模块的Dingdian控制器的op方法,14186是一个参数
5、上linux.php代码,直接使用$argv可以接收参数
$_GET['m'] = $argv[1];
$_GET['c'] = $argv[2];
$_GET['a'] = $argv[3];
$_GET['id'] = $argv[4];