2025-04-14
#!/bin/bash
# 列出当前目录和子目录的文件.
find ./
# 查找当前目录和子目录下*.sh文件.
find ./ -name "*.sh" -print
# 查找当前目录和子目录下*.sh文件.并忽略大小写.
find ./ -iname "*.sh" -print
# 匹配多个条件.
find ./ \( -name "*.sh" -o -name "*.txt" \) -print
# 正则匹配多个条件
find ./ -regex ".*\(\.txt\|\.sh\)$"
# 忽略大小写
find ./ -iregex ".*\(\.txt\|\.sh\)$"
# -path用来匹配目录和文件名.
find ./ -path "*sh"
# -maxdepth目录深度.
find ./ -maxdepth 2  \( -name "*.sh" -o -name "*.txt" \) -print
# 打印深度为2的文件
find ./ -maxdepth 2 -type f
# 打印深度为2的目录
find ./ -maxdepth 2 -type d
# 列出当前目录所有软件链接.
find ./ -type l
# -atime 最后一次访问时间
# -mtime 最后一次修改时间
# -ctime 最后一次改变的时间
# 这里和上面一样。只是以分钟计数.
# -amain
# -mmain
# -cmain
# 2天内被修改的文件.
find ./ -type f -mtime -2
# 查询当前目录文件超过1kb的文件.
# b 块
# c 字节
# w 字
# K kb
# M  mb
# G gb
find ./ -type f -size +1k
# -delete 查询并删除
find ./ -type f -size +1k -delete
# 查询权限为644的文件
find ./ -type f -perm 644 -print
# 查询所有PHP文件中权限为644的文件
find ./ -type f -name "*.php" ! -perm 644 -print
find ./ -type f -name "*.php" -perm 644 -exec chmod +x {} \;
# 找出文件并执行chmod +增加读权限.
find ./ -type f -name "*.sh" -perm 644 -exec chmod +x {} \;
# 将查找的结果打印到allf.txt文件
find ./ -type f -name "*.sh" -perm 644 -exec cat {} \; > allf.txt
# 转换文件权限为数字
find ./ -printf '%m %p\n'
# 查找排除.git和node_module目录
find ./ -type l -name "*.php" \( -name ".git" -prune \) -o \( -name "node_module" -prune \)

 

标签: Linux
2023-05-12
当我们想用后台跑一个命令的时候可能经常是这样使用的
$ drush mycommand &


这个命令只是在后台跑。当我们关掉ssh了以后,此进程就没有了. 随后了解到了nohup。 他还会生成一个.out的日志文件

使用方法
$nohup drush mycommand &

 

标签: Linux
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