Viewed   98 times

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_exec('crontab -l');
echo $output;

But how to add a cron job with PHP? 'crontab -e' would just open a text editor and you will have to manually edit the entries before saving the file.

And how to delete a cron job with PHP? Again you have to manually do this by 'crontab -e'.

With a job string like this:

$job = '0 */2 * * * /usr/bin/php5 /home/user1/work.php';

How do I add it to the crontab jobs list with PHP?



crontab command usage

usage:  crontab [-u user] file
        crontab [-u user] [ -e | -l | -r ]
                (default operation is replace, per 1003.2)
        -e      (edit user's crontab)
        -l      (list user's crontab)
        -r      (delete user's crontab)
        -i      (prompt before deleting user's crontab)


$output = shell_exec('crontab -l');
file_put_contents('/tmp/crontab.txt', $output.'* * * * * NEW_CRON'.PHP_EOL);
echo exec('crontab /tmp/crontab.txt');

The above can be used for both create and edit/append provided the user has the adequate file write permission.

To delete jobs:

echo exec('crontab -r');

Also, take note that apache is running as a particular user and that's usually not root, which means the cron jobs can only be changed for the apache user unless given crontab -u privilege to the apache user.

Tuesday, August 16, 2022

Start by typing at a command line:

whereis php

Do this as the user that the cron job will be run under. This will show you the path to your executable. You can then use that path (if it's not already in your PATH variable) in your cron entry:

5 * * * * /your/path/to/php /var/www/some/path/script.php

Edit: you may need to install the php5-cli (Ubuntu package name) package if all you have is the Apache PHP module installed. This will give you the binary executable that you can run from a command line.

Friday, October 7, 2022

There are a lot of ways to solve this, one of them is by taggin the Edit and Delete labels or some other element ( td, tr or taking the value from the id field you already have). Here's a very simple (not the best but it can give a very clear idea of what the deal is with this things):

    <button id="edit_<?php echo $id ?>">Edit</button>
    <button id="delete_<?php echo $id ?>">Delete</button>

By this you can extrac the id value from button using Jquery o javascript.

Tuesday, October 4, 2022

I finally found out the answer: the $USER variable is empty, if I execute it from PHP. Now I use:

(crontab -l; echo "$0 $1 * * $2 /var/www/") | crontab -

and it works!

Thursday, September 8, 2022

Try to call the script via http with wget like so:

* * * * * wget >/dev/null 2>&1
Saturday, November 19, 2022
Only authorized users can answer the search term. Please sign in first, or register a free account.
Not the answer you're looking for? Browse other questions tagged :