2023-03-06
$process = Drush::drush($this->siteAliasManager()->getSelf(), 'cache-rebuild');
$process->mustrun();

 

标签: Drush Drupal9
2023-03-05

需要执行的脚本, 里面包含Drush命令, 这个脚本我就放在我站点的bin目录下.  在web上层.

$ cd /var/www/project
$ mkdir bin
$ mkdir logs #用于生成日志
$ cd bin
$ $ vim task.sh

输入脚本内容, drush my-monitor是我自定的一个drush 命令

#!/bin/bash
export HOME=/var/www/project
/var/www/project/vendor/bin/drush my-monitor >> /var/www/project/logs/task.log

# 这里也可以使用   /var/www/project/vendor/bin/drush my-monitor --root=/var/www/project >> /var/www/project/logs/task.log
# 但是我这样出现了错误. 我就用了上面这种方式
# drush可以复制多行,每行为一个进程

需要执行的脚本创建好了, 接下来创建Linux 服务

$ vim /etc/systemd/system/my_monitor.service

输入服务内容

[Unit]
Description=My monitor service
After=network.target

[Service]
ExecStart=/bin/bash /var/www/project/bin/task.sh  # 这里对应脚本目录
Restart=always
RestartSec=1
启动服务和查看状态
$ systemctl start my_monitor.service
$ systemctl status my_monitor.service

 

为什么需要这种脚本,我举几个案例

1. 比如我创建Node以后需要执行一个拉取远程的一个数据, 这个过程相当漫, 你可以创建一个task交给后台的脚本的去跑.

2. 我要从其它服务器同步10万条数据, 如果是batch可能中途会中断,我需要一直盯着. 你也可以创建一个同步的task交给服务,让他在后台跑.

3. 用户下单以后5分钟内不付款, 自动取消订单. 你可以创建一个5分钟以后的task. 让后台去完成这个功能.

4. 用户登陆以后需要从远程服务器更新用户的一些其它信息. 这过程很慢,我们需要交给后台的task去完成

 

标签: Linux Drush Drupal