PHPファイルからrootとしてコマンドラインコマンドを実行したいと思います。私の場合は、PHPページでcrontabファイルを見たいと思います。
sudo
私のラズベリーパイとラズベリーパイOSの実行PHPラインからPHPにコマンドを実行することはお勧めできません。
echo (shell_exec("sudo more /var/spool/cron/crontabs/pi"));
動作しません。だからシェルスクリプトを作成しました。
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
どうですか?毎時間rsync
ファイルをcrontab -e
ファイルにコピーするクローンがあります。cron.txt
うまくいきますが(以前)コピーを見たくありません。
編集:私の問題は、sudoで始まったジョブの出力が0であることです。コメントで使用の提案を受けましたsudo crontab -l
。これはroot crontabを提供し、-l
解決策がわからないので、私が使用した行よりも優れています。しかし、問題は残っています。出力は0です。
答え1
さて、私はphp(apache2)またはphp(apache2)で実行されているシェルスクリプトでsudo操作を実行する方法を見つけました。
秘訣は、sudo visudo
このようなコメントをたくさん見つけたということです。しかし、私は間違って使用しました! sudo 操作を実行する必要があるスクリプトは、自分の .sh ファイルにすることはできません。しかし、コマンドのフルパスです。
crontabとuser:www-dataの場合:
www-data ALL=NOPASSWD: /usr/bin/crontab
誰かが同じ問題を抱えているとき、その人が私よりも早くその内容を読んでほしい。