如何使用 PHP 检查 cronjob 是否存在?
有没有办法知道 php 中是否已经存在 cronjob?
我希望它能够在大多数主机上运行,甚至是共享的。
Is there a way to know if a cronjob already exists with php?
I want it to work on most hostings, even shared.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
不,PHP 中没有这样的直接权限。
但是(在专用服务器上)您可以编写一个 PHP 脚本来读取
/etc/crontab
文件并解析信息以检查服务器上是否存在特定的 cron。NO, There's no such direct privilege in PHP.
But (On Dedicated Server) you can write a PHP script to read
/etc/crontab
file and parse the info to check if a specific cron exists on the server.您可以尝试运行 crontab -l 命令,该命令应该可以在 PHP 中运行。您可能必须限定完整路径,例如
/usr/bin/crontab -l
,这取决于主机。这将为运行该命令的用户返回 crontab 条目,如果 PHP 页面和 cron 作业以同一用户运行(现在许多共享主机使用 setuid php 脚本),这就是您想要的。要获取其他用户的 crontab 条目,您需要大多数系统上的超级用户权限,以及
crontab -l -u otheruser
。You could try running the
crontab -l
command, which should work from PHP. You might have to qualify the full path, e.g.,/usr/bin/crontab -l
, which would depend on the host.This will return the crontab entries for the user who runs the command, which is what you want if the PHP page and cron jobs run as the same user (many shared hosts use setuid php scripts these days). To get the crontab entries for another user you'd need superuser rights on most systems, and
crontab -l -u otheruser
.使用
shell_exec()
或system()
或类似的东西可能解决问题。但它在
safe_mode
打开时不起作用。我认为共享主机不会启用这些功能。
@Nathan:
/usr/bin/crontab -l
不会为运行脚本的用户返回 crontab 吗?例如 www-data、wwwrun、apache 等等?using
shell_exec()
orsystem()
or something like that might solve the problem.But it won't work with
safe_mode
turned on.and i think shared hostings won't have these features enabled.
@Nathan: wouldn't
/usr/bin/crontab -l
be returning the crontab for the user who runs the script? e.g. www-data, wwwrun, apache or something?除了 Nathan 的回答之外:
如果您可以运行
exec()
和crontab
命令In addition to Nathan's answer:
If you can run
exec()
and thecrontab
command