如何从Plesk 12 Cron任务中获取传递的参数?
解决Plesk 12中Cron任务传参给PHP脚本的问题
首先得纠正你一个小错误:你提到的$arg是不存在的变量,正确的应该是$argc(记录参数总个数)和$argv(存储参数的数组),而且$argv[0]对应的是脚本本身的路径/文件名,你要的参数是从$argv[1]和$argv[2]开始取的,这是你没拿到参数的第一个原因。
接下来,结合Plesk的环境,咱们一步步排查解决:
1. 调整PHP脚本的参数获取逻辑
把脚本里的参数获取代码改成这样试试:
<?php // 先检查$argv是否可用 if (isset($argv)) { echo "第一个参数:" . $argv[1] . "\n"; echo "第二个参数:" . $argv[2] . "\n"; // 打印所有参数确认 print_r($argv); } else { // 如果$argv不可用,尝试用$_SERVER['argv'] print_r($_SERVER['argv']); } ?>
注意:$argv只有在PHP以CLI(命令行)模式运行时才默认可用,如果是CGI模式,可能需要依赖$_SERVER['argv']或者调整配置。
2. 检查Plesk中Cron任务的命令格式
在Plesk的Cron任务设置里,Command字段的写法非常关键,你要确保用CLI版PHP执行脚本并传递参数,正确格式如下:
/usr/bin/php /path/to/your/script.php 33 On
usr/bin/php是PHP CLI的完整路径,不确定的话可以登录服务器执行which php命令查看。/path/to/your/script.php是你PHP文件的绝对路径,比如/var/www/vhosts/yourdomain.com/httpdocs/your_task.php- 末尾直接跟上你的两个参数
33和On
如果你的服务器用的是php-cgi而非PHP CLI,命令需要改成:
/usr/bin/php-cgi -f /path/to/your/script.php -- 33 On
这里的--是用来分隔PHP选项和脚本参数的,必须加上,否则参数会被当成php-cgi的命令选项处理。
3. 验证PHP配置是否允许获取命令行参数
登录服务器,执行以下命令查看CLI模式下的PHP配置:
php -i | grep register_argc_argv
如果输出是register_argc_argv => On => On,那没问题;如果是Off,你需要修改CLI版的php.ini文件(注意不是网页用的php.ini),把register_argc_argv设为On,之后按需重启相关服务。
4. 手动测试脚本,排除环境问题
先在服务器命令行里手动执行你的脚本:
php /path/to/your/script.php 33 On
如果手动执行能正确拿到参数,那问题大概率出在Plesk的Cron命令配置上;如果手动执行也拿不到参数,那就是脚本或者PHP配置的问题。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

