当前位置: 首页 > 面试题库 >

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

辛弘壮
2023-03-14
问题内容

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

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

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

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

有任何想法吗?


问题答案:

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

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

  • 术语
  • SSH_CLIENT
  • SSH_TTY
  • SSH_CONNECTION

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

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



 类似资料:
  • 我已经创建了一个自动化的测试套件使用Selenium网络驱动程序,Maven 但是,当同一个shell脚本使用cron作业运行时,不会执行maven命令。我在shell脚本中看到了一些为maven指定路径的解决方案。这对我也不管用。 #!/宾/巴什 "" cd/home/me/projects/my_test_suite 导出路径=$PATH:/home/me/installs/apache-ma

  • 问题内容: 我最近打算测试从python作为命令行参数运行phantomJS,我还不了解它,但是看到了例子。因为PhantomJS是从命令行运行的,所以这似乎是可行的。PhantomJS吐出的结果将直接进入变量。 在我走这条路之前,在node.js中进行这项工作实际上对我来说更有用,这让我开始思考,当程序从命令行运行并存储数据结果时,我是否可以使用node来运行PhantomJS PhantomJ

  • 我探索了几个设置Kafka的选项,我知道动物园管理员必须启动并运行才能启动Kafka。 我想知道如何才能找到以下内容。 1)我的动物园管理员实例的主机名和端口---我检查了zoo.cfg,我只能找到ClientPort而不是主机名,主机名会是我盒子的主机名吗?? 2)检查ZooKeeper是否启动并运行——我尝试执行< code>ps -ef | grep "zoo"操作,但什么也找不到。可能是我

  • 问题内容: 我有一个bash脚本,可以通过命令行像这样运行: 我在调用某个php文件后尝试执行上述命令。 我现在所拥有的是: 但这是行不通的。我尝试过使用和太,但剧本从来没有得到执行。 但是,当我尝试运行它时,它确实起作用,并且是所有文件的列表。 我不确定这是由于我使用的VPS的限制还是问题出在其他地方? 问题答案: 您可能需要在调用脚本之前将chdir更改到正确的目录。这样,您可以在调用shel

  • 我不知道如何使用调用Spring批处理中定义的作业,文档细节对我来说是不够的。 我遵循了Spring Batch官方指南,使用Java注释(例如)在Spring Batch中编写作业,因为我希望避免使用XML配置文件来描述作业、步骤等。 到目前为止我已经: 配置类(见下文),我使用AnnotaIon将定义、、、和(带有的所有内容放入其中。 具有方法的类,该方法具有并具有注释,以导入处理作业中的数据

  • 问题内容: 如何检查计划的Quartz Cron作业是否正在运行?是否有任何API可以进行检查? 问题答案: scheduler.getCurrentlyExecutingJobs()在大多数情况下应该可以工作。但是请记住不要在Job类中使用它,因为它使用ExecutingJobsManager(a JobListener)将正在运行的作业放到HashMap中,该HashMap在作业类之前运行,因