一尘不染

PHP可以检测它是从cron作业还是从命令行运行?

php

我正在寻找一种使用PHP的方法,以检测脚本是从外壳上的手动调用运行的(我登录并运行该脚本),还是从crontab条目运行。

我有各种用php编写的维护类型脚本,这些脚本已设置为在crontab中运行。有时,我需要提前手动运行它们,或者如果发生故障/损坏,则需要运行几次。

这样做的问题是,每次手动运行脚本时,我也不想发生某些任务(发布到Twitter,发送电子邮件等)时需要设置的外部通知。

我正在使用php5(如果需要的话),它是一个相当标准的linux服务器环境。

有任何想法吗?


阅读 201

收藏
2020-05-29

共1个答案

一尘不染

与其检测何时从crontab运行脚本,不如检测何时手动运行脚本。

从命令行运行脚本时,会设置许多环境变量(在$
_ENV数组中)。这些内容会有所不同,具体取决于您的服务器设置和登录方式。在我的环境中,在手动运行脚本时会设置以下环境变量,而从cron运行时不会设置这些环境变量:

  • 术语
  • SSH_CLIENT
  • SSH_TTY
  • SSH_CONNECTION

也有其他人。因此,例如,如果您始终使用SSH来访问该框,则以下行将检测脚本是否从cron运行:

$cron = !isset($_ENV['SSH_CLIENT']);

2020-05-29