php - '/var/spool/cron' 不是目录,正在退出。尝试通过 PHP 的 shell_exec 使用 crontab 时

标签 php linux apache shell-exec selinux

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

它不起作用。

只是为了确保我在正确的轨道上,作为初学者,我只想让 php 中的“crontab -l”工作并将其打印到网络浏览器。

我是这样做的(handle_email_cronjob.php):

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

但我得到的只是一无所获。 (执行 shell_exec('ls -l'); 给我目录中的文件/目录列表)

猫错误日志:

'/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

引用资料:

Understanding audit.log

Troubleshoot SELinux

关于php - '/var/spool/cron' 不是目录,正在退出。尝试通过 PHP 的 shell_exec 使用 crontab 时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10706031/

相关文章:

php - 没有数据的数据库的PostgreSql复制结构

php - MYSQL - 选择历史最高分

linux - cron 作业查找文件并列出其输出(如果找到)

php - LAMP 服务器 - 一个命令?

wordpress - 可以在同一个 Web 服务器上运行 React JS 和 Wordpress 吗?

php - 是否有必要在 laravel 中为数据库操作创建模型(用于查询生成器)?

php - 将各种日期格式更改为一种格式

Linux Webserver - htop 显示极端的 cpu 使用率?

linux - 包括X服务器的压力测试

java - Olingo V4 注释未反射(reflect)在 $metadata 中