本帖最后由 adminlily 于 2020-12-5 16:59 编辑
计划后台任务为了正常运行,必须定期执行iTop维护操作和异步任务。为了简化安装,所有后台任务都被分组为从单个文件启动:
webservices/cron.php
以下功能依赖于cron.php的激活
- 如果不调用此Web服务,则工单到达阈值(TTOOTTR)时不会发生通知。 (任务:检查秒表三个持有)
- 检查工单SLA。达到限制的工单将传递到升级TTOOTTR状态。
- 自动备份。
- 自动删除在对象创建或版本被取消期间创建的无用的附件和嵌入式图像(任务:每小时运行的InlineImageGC)
- 异步电子邮件。默认情况下,此选项处于禁用状态。要启用它,请将配置文件中的'发送邮件_asynchronous'设置为1(任务:ExecAsyncTask)
- 例如,许多扩展也依赖于此Cron:工单由发送邮件创建,批准自动化,与客户沟通等…
在Windows上安排
使用schedtask.exe或'at'命令安排cron.php每5分钟运行一次。
schtasks.exe /create /sc minute /mo 5 /tn "iTop CRON" /tr "\"/var/www/itop/webservices/cron.cmd\""
在Linux上调度
编辑crontab以每5分钟执行一次脚本:
*/5 * * * * www-data /usr/bin/php /var/www/html/itop/webservices/cron.php --param_file=/etc/itop-cron.params >>/var/log/itop-cron.log 2>&1
不要使用根用户运行cron.php!您必须使用运行iTop的Web服务器使用的相同用户启动命令。
通过网络安排
页面cron.php也可以通过Web服务器执行。如果您无权访问系统(例如在共享主机系统上),这将很有用。在这种情况下,您可以依靠Web cron服务为您运行它。但是与本地计划的作业相比,频率和执行时间可能会受到限制。
争论
论据 | 描述 | Defaut价值 | param_file | 参数文件的路径 | | auth_user | 用户登录名-仅CLI模式,如果未使用任何参数文件 | - | auth_pwd | 用户密码-仅CLI模式,如果未使用任何参数文件 | - | verbose | 如果设置为1,将给出更多信息,请使用此信息进行故障排除。请注意:由于流程在后台中连续运行,因此日志文件往往会很快变得很大。请勿长时间将此选项设置为1。 | 0 | status_only | (iTop 2.0.1中的新增功能)如果设置为1,则会显示有关计划任务的状况,并且流程立即停止(可以与cron.php的正常执行并行启动)。 | 0 |
参数文件
由于系统上的其他用户可以看到在命令行上传递给cron.php的参数,因此建议的实践是将所有敏感参数从命令行移开。这就是“参数文件”的目的。
参数param_file可以与大多数RESTTCLI Web服务一起使用。按照约定,cron.php服务搜索参数文件名«cron.params»以读取其参数。
- 参数文件包含键值对。
- 注释以#开头(在#之后找到的任何字符都将被忽略)
iTop软件包包含一个名为cron.distrib的文件,该文件可以用作创建自己的参数文件的模板。
例:
确保无法从网上访问参数文件!可以将其移动到Web服务器的范围之外的目录(例如,在Linux系统上的etccitopp将是一个不错的位置),或者在Web服务器的配置中制定特殊的排除规则。只有从命令行运行cron.php的流程才能访问此文件。
设定值
这些设置已配置到主要的iTop配置文件中:“ itop-config.php”
设置 | 描述 | Defaut价值 | cron_max_execution_time | cron.php页面的持续时间(秒),必须短于php设置max_execution_time且短于Web服务器回复超时 | 600 | cron_sleep | cron.php再次检查是否必须执行某些操作之前的持续时间(秒) | 2 | email_asynchronous | 如果设置为1,则电子邮件将离线发送,这需要激活cron.php。例外:发送邮件测试功用之类的某些功能将强制执行序列化模式 | 0 |
允许的用户
仅允许管理员执行cron.php。
故障排除
当任务不再运行时,需要了解以下几点:
cron.php在做什么?
- cron.php程序在启动时,询问实现此php接口的任务,并将其记录在表priv_backgroundtask中。
- 该表中存在的条目依赖于安装的iTop扩展。
- priv_backgroundtask包含每个任务的多个信息,例如:
- 当它最后一次运行时,
- 下一次运行应该何时开始,
- 该任务的平均执行时间是多少?
- 根据管理员(字段状况)的请求,任务当前处于活动状态还是已暂停?
- …
- cron.php程序,查找活动的任务并传递下一次运行,
- 一个接一个地执行任务,要求每个任务在cron_max_execution_time之后停止执行。该任务当然会在有意义的时候停止,例如对于邮件自动创建工单,它可以在处理2个收到的邮件之间停止。
- 在下一次运行时询问任务,并将该信息存储在表中,
- 然后,它检查自身启动时间是否超过cron_max_execution_time,如果是,它会自杀(这是因为永无休止的流程通常会消耗未完全释放的内存)
- 否则,它将等待cron_sleep秒,然后再次检查表以查找准备好执行的任务。
什么时候可以做什么...
似乎永远不会执行任务:
当特定任务遇到使其陷入无限循环的问题时,cron.php可能会被php max_execution_time停止(通常不在CLI中运行);在所有情况下,紧随其后的任务将永远不会执行。在下面的cron.php运行中,由于总是以相同的顺序执行任务,因此可能会再次出现相同的问题。为了识别故障任务,您应该通过在priv_backgroundtask表中设置它们的状况来怀疑一个有此问题的任务,然后一个接一个地暂停,看看您是否停止了该故障任务。这种情况通常是由于扩展程序带来的错误导致该任务面临计划外的情况。
应该监视日志文件以生成警报,以使高级注意到此问题。
|