我想以 root 身份从 php 文件执行命令行命令。就我而言,我想在我的 php 页面中查看 crontab 文件。
sudo
不建议在 php 中运行命令,在我的树莓派和树莓派操作系统上运行 php 行
echo (shell_exec("sudo more /var/spool/cron/crontabs/pi"));
不起作用。所以我创建了一个shell脚本:
crontab.sh
#!/bin/bash
echo "Start Crontab"
sudo more /var/spool/cron/crontabs/pi
echo "End Crontab"
我创建了一个 php 页面: 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"));
?>
当我在命令行中执行 crontab.sh 时。似乎有效。因为我看到了 crontab 文本。当我加载 php 页面时。我没有看到 crontab 文本。我只看到
Get Current User: pi
Who am I: www-data
Start Crontab End Crontab
我能做些什么?我有一个 cron,用于每小时rsync
将文件复制crontab -e
到一个文件。cron.txt
它有效,但我不想查看(旧的)副本。
编辑:我的问题是以 sudo 启动的任务输出为零。在评论中我得到了使用的建议sudo crontab -l
。这比我使用的行更好,因为它提供了 root crontab,而我只是不知道-l
解决方案。但问题仍然存在。输出为零。
答案1
好的,我找到了如何在 php (apache2) 或从 php (apache2) 执行的 shell 脚本中执行 sudo 任务。
诀窍在于sudo visudo
我发现很多这样的评论。但我用错了!应该允许执行 sudo 任务的脚本不能是我自己的 .sh 文件。但命令的完整路径。
对于 crontab 和 user:www-data 即:
www-data ALL=NOPASSWD: /usr/bin/crontab
当有人遇到同样的问题时,我希望他们比我更快地阅读。