I want to execute a command line command as root from a php file. In my case I want to view the crontab file in my php page.
Running the sudo command in php is not recommended and on my raspberry pi with raspberry pi OS the php line
echo (shell_exec("sudo more /var/spool/cron/crontabs/pi"));
does not work. So I created a shell script:
crontab.sh
#!/bin/bash
echo "Start Crontab"
sudo more /var/spool/cron/crontabs/pi
echo "End Crontab"
and I created a php page: crontab.php
<?php
echo "Get Current User: " . get_current_user();
echo "<br>Who am I: ".(exec("whoami"));
echo "<br>";
echo (shell_exec("/var/www/html/cmd/crontab.sh"));
?>
When I execute the crontab.sh in the command line. It seems to work. Because I see the crontab text. When I load the php page. I do not see the crontab text. I only see
Get Current User: pi
Who am I: www-data
Start Crontab End Crontab
What can I do?
I had a cron that used rsync to copy the crontab -e file to a cron.txt file every hour. It worked but i do not want to view an (old) copy.
edit: My problem is that the task that starts with sudo gives zero output. In the comments I got the suggestion to use sudo crontab -l. That's better than the line I used because it gives the root crontab and I just did not know of the -l solution. But the problem is still there. There is zero output.
sudo crontab -eThat way, your script already has root access and you don't need to usesudo.moredoes not make sense since a web page isn't interactive. You probably wantcrontab -lorsudo crontab -l -u pi. (Orsudo cat /var/spool/cron/crontabs/pi, though technically that only works by accident and other distributions have their crontabs in other locations.)crontab -ewill also not work because you're asking to edit the crontab -- from a noninteractive shell.