Use PHP to create, edit and delete crontab jobs?

前端 未结 12 1269
余生分开走
余生分开走 2020-11-22 06:54

Is it possible to use PHP to create, edit and delete crontab jobs?

I know how to list the current crontab jobs of the Apache user:

$output = shell_ex         


        
相关标签:
12条回答
  • 2020-11-22 06:57

    Nice...
    Try this to remove an specific cron job (tested).

    <?php $output = shell_exec('crontab -l'); ?>
    <?php $cron_file = "/tmp/crontab.txt"; ?>
    
    <!-- Execute script when form is submitted -->
    <?php if(isset($_POST['add_cron'])) { ?>
    
    <!-- Add new cron job -->
    <?php if(!empty($_POST['add_cron'])) { ?>
    <?php file_put_contents($cron_file, $output.$_POST['add_cron'].PHP_EOL); ?>
    <?php } ?>
    
    <!-- Remove cron job -->
    <?php if(!empty($_POST['remove_cron'])) { ?>
    <?php $remove_cron = str_replace($_POST['remove_cron']."\n", "", $output); ?>
    <?php file_put_contents($cron_file, $remove_cron.PHP_EOL); ?>
    <?php } ?>
    
    <!-- Remove all cron jobs -->
    <?php if(isset($_POST['remove_all_cron'])) { ?>
    <?php echo exec("crontab -r"); ?>
    <?php } else { ?>
    <?php echo exec("crontab $cron_file"); ?>
    <?php } ?>
    
    <!-- Reload page to get updated cron jobs -->
    <?php $uri = $_SERVER['REQUEST_URI']; ?>
    <?php header("Location: $uri"); ?>
    <?php exit; ?>
    <?php } ?>
    
    <b>Current Cron Jobs:</b><br>
    <?php echo nl2br($output); ?>
    
    <h2>Add or Remove Cron Job</h2>
    <form method="post" action="<?php $_SERVER['REQUEST_URI']; ?>">
    <b>Add New Cron Job:</b><br>
    <input type="text" name="add_cron" size="100" placeholder="e.g.: * * * * * /usr/local/bin/php -q /home/username/public_html/my_cron.php"><br>
    <b>Remove Cron Job:</b><br>
    <input type="text" name="remove_cron" size="100" placeholder="e.g.: * * * * * /usr/local/bin/php -q /home/username/public_html/my_cron.php"><br>
    <input type="checkbox" name="remove_all_cron" value="1"> Remove all cron jobs?<br>
    <input type="submit"><br>
    </form>
    
    0 讨论(0)
  • 2020-11-22 06:59

    Depends where you store your crontab:

    shell_exec('echo "'. $job .'" >> crontab');
    
    0 讨论(0)
  • 2020-11-22 06:59

    The easiest way is to use the shell_exec command to execute a bash script, passing in the values as parameters. From there, you can manipulate crontabs like you would in any other non-interactive script, and also ensure that you have the correct permissions by using sudo etc.

    See this, Crontab without crontab -e, for more info.

    0 讨论(0)
  • 2020-11-22 07:02

    We recently prepared a mini project (PHP>=5.3) to manage the cron files for private and individual tasks. This tool connects and manages the cron files so you can use them, for example per project. Unit Tests available :-)

    Sample from command line:

    bin/cronman --enable /var/www/myproject/.cronfile --user www-data
    

    Sample from API:

    use php\manager\crontab\CrontabManager;
    
    $crontab = new CrontabManager();
    $crontab->enableOrUpdate('/tmp/my/crontab.txt');
    $crontab->save();
    

    Managing individual tasks from API:

    use php\manager\crontab\CrontabManager;
    
    $crontab = new CrontabManager();
    $job = $crontab->newJob();
    $job->on('* * * * *');
    $job->onMinute('20-30')->doJob("echo foo");
    $crontab->add($job);
    $job->onMinute('35-40')->doJob("echo bar");
    $crontab->add($job);
    $crontab->save();
    

    github: php-crontab-manager

    0 讨论(0)
  • 2020-11-22 07:02

    You can put your file to /etc/cron.d/ in cron format. Add some unique prefix to the filenaname To list script-specific cron jobs simply work with a list of files with a unique prefix. Delete the file when you want to disable the job.

    0 讨论(0)
  • 2020-11-22 07:04

    Its simple You can you curl to do so, make sure curl installed on server :

    for triggering every minute : * * * * * curl --request POST 'https://glassdoor.com/admin/sendBdayNotification'

          • *

      minute hour day month week

    Let say you want to send this notification 2:15 PM everyday You may change POST/GET based on your API:

    15 14 * * * curl --request POST 'url of ur API'

    0 讨论(0)
提交回复
热议问题