'/var/spool/cron' 不是一个目录,需要救助.当尝试通过PHP的shell_exec使用crontab时


'/var/spool/cron' is not a directory, bailing out. when trying to work with crontab via PHP's shell_exec

我正在创建一个Web应用程序。部分功能取决于用户可以启动/停止导入电子邮件的 cronjob。

它不起作用。

只是为了确保我走在正确的轨道上,作为初学者,我只想从 php 制作"crontab -l"并将其打印到 Web 浏览器。

这就是我的做法(handle_email_cronjob.php(:

$output = shell_exec('crontab -l');
echo $output;

但我得到的只是什么都没有。(做shell_exec('ls -l'(;给我目录中的文件/目录列表(

猫error_log:

'/var/spool/cron' is not a directory, bailing out.

好吧,无论错误日志说什么,它都是一个目录。 ls -Z/var/spool:

drwxr-xr-x. apache apache system_u:object_r:httpd_sys_rw_content_t:s0 cron

SELinux 已打开,我不希望它改变。

ls -Z/var/spool/cron:

-rwxrwxrwx. apache apache unconfined_u:object_r:httpd_sys_rw_content_t:s0 apache
-rw-------. root   root   unconfined_u:object_r:cron_spool_t:s0 root

应该使用的是 Apache 。(我确实尝试将cron_spool_t设置为apache,但仍然不起作用。

ls -Z handle_email_cronjob.php:

-rwxr-xr-x. apache apache unconfined_u:object_r:httpd_sys_script_exec_t:s0 handle_email_cronjob.php

我只是有一种直觉,它与 SELinux 有关,但我不知道如何解决它。

问题是什么,我该如何解决? (或者有比我更好的方法吗?

在学习如何对 SELinux 进行故障排除后,我意识到我必须标记/var/spool/cron 以便 httpd 可以读取/写入该目录:

chcon -R -t httpd_sys_script_rw_t /var/spool/cron

引用:

了解审核.log

对 SELinux 进行故障排除