Php 如何通过读取文件动态添加cron作业,而不考虑服务器

Php 如何通过读取文件动态添加cron作业,而不考虑服务器,php,codeigniter,cron,Php,Codeigniter,Cron,我想在用户在其服务器上安装php应用程序后动态添加cron作业,如管理员配置,我需要在php中设置配置设置后动态设置cron作业? 我正在使用codeigniter设置cron作业,我还从cpanel手动添加了相同的作业,它工作正常。您可以在中创建一个文件 /etc/cron.d 并使用PHP的文件内容更新文件。但是,您需要根据PHP处理程序提升PHP或Apache的权限。不建议这样做,因为这会导致安全问题 如果您使用Cron运行PHP脚本,那么您可以每隔X个时间直接使用PHP调用脚本。在数据库

我想在用户在其服务器上安装php应用程序后动态添加cron作业,如管理员配置,我需要在php中设置配置设置后动态设置cron作业?
我正在使用codeigniter设置cron作业,我还从cpanel手动添加了相同的作业,它工作正常。

您可以在中创建一个文件

/etc/cron.d

并使用PHP的文件内容更新文件。但是,您需要根据PHP处理程序提升PHP或Apache的权限。不建议这样做,因为这会导致安全问题

如果您使用Cron运行PHP脚本,那么您可以每隔X个时间直接使用PHP调用脚本。在数据库中创建一个变量,表示上次运行脚本的时间。如果自脚本运行以来经过了X个时间量,则运行脚本并更新变量。 如果脚本需要很长时间才能执行,那么使用PHP在单独的进程中运行它,这样用户就不必等待脚本完成


谢谢

您可以使用shell脚本执行此操作

shell_exec('echo "25 15 * * * <path to php> /var/www/cronjob/helloworld.php > /var/www/cronjob/cron.log" | crontab -')

首先,您必须创建一个txt文件,例如crontab.txt 然后您必须使用如下所示的shell脚本

exec ( 'sudo crontab -u apache -r' );
file_put_contents ( '/var/www/html/YOUR_PROJECT/crontab.txt',"25 15 * * * php /var/www/html/YOUR_PROJECT/YOUR_CONTROLLER/YOUR_METHOD'.PHP_EOL);
最后,你必须像这样执行这个文件

exec ( 'crontab /var/www/html/YOUR_PROJECT/crontab.txt' );

希望这能对您有所帮助。

嗨,谢谢您的回复,根据回复,我现在得到了答案 我尝试使用php codeigniter向crontab文件添加新的cron作业: 以下是我的答案

$phppath =  exec('which php');
$user_file_path =  getcwd();
$cronjob1 = "0 0 1 * * $phppath  $user_file_path/index.php 
automatic_updates/leave_update_cron";
// run each cron job
// get all current cron jobs
$output = shell_exec('crontab -l');
// add our new job
file_put_contents('/tmp/crontab.txt', $output.$cronjob1.PHP_EOL);
// once append the job, execute the new file
exec('crontab /tmp/crontab.txt');

这将添加一个新的cron作业,而不删除当前cron作业文件中的任何内容

如果在windows PC上安装PHP会发生什么谢谢你的回复。。。第一种解决方案:因为不推荐使用,所以我没有预先设置它,在第二种方法中,它是否会影响执行时间,所以我每次都必须检查这个函数,对吗?只有该应用程序每天至少运行一次,它才会被执行,对吗?谢谢你的回复,它帮助很大,但我想附加到该文件,而不是覆盖,任何方法都可以吗?然后你需要使用crontab-e来编辑crontab文件我想避免用户干预来编辑这个crontab。需要使所有这些自动化,还需要确保crontab文件/var/spool/cron/的现有内容不会丢失,这将适用于上述类。我已经获得了与您相同的回复,我想附加到该文件,而不是覆盖,任何方法都可以吗?对于文件附加,您可以使用文件附加,如下面的文件内容'/var/www/html/YOUR_PROJECT/crontab.txt',25 15***php/var/www/html/YOUR_PROJECT/YOUR_CONTROLLER/YOUR_method'.php_EOL,file_append;
$phppath =  exec('which php');
$user_file_path =  getcwd();
$cronjob1 = "0 0 1 * * $phppath  $user_file_path/index.php 
automatic_updates/leave_update_cron";
// run each cron job
// get all current cron jobs
$output = shell_exec('crontab -l');
// add our new job
file_put_contents('/tmp/crontab.txt', $output.$cronjob1.PHP_EOL);
// once append the job, execute the new file
exec('crontab /tmp/crontab.txt');