Linux暂停进程,恢复进程,接管进程备忘录

在运行的命令下按Ctrl+Z可以暂停进程运行

fg            #恢复到前台继续运行
jobs        # 查看后台任务
fg %1     # 恢复 jobs 列表里的 1 号任务
bg          #后台继续运行(不挂起)
bg %1   #默认恢复最后一个挂起的任务
disown -h %1  #挂起后转后台长期运行

 

reptyr接管pid

apt install reptyr -y # Debian/Ubuntu
yum install reptyr -y # CentOS/RHEL


reptyr 12345  #12345是pid进程

 

这样可以把一个长期运行需要观察输出的进程丢进screen\tmux里面挂机运行了

screen常用命令参数备忘录

screen -S  name。 创建screen会话
screen -Ls 显示进程列表
screen -r sid 恢复某个进程
screen -X -S sid quit 终止某个进程
ctrl+a  d 离开当前进程
ctrl+a k 终止当前进程
screen -S 原始任务名 -X sessionname 修改后的任务名

thinkphp给控制台增加错误显示方法

路径vendor/topthink/framework/src/think/Console.php

 

在 public function run()的 $output->renderException($e);下面增加

 $output->error($e->getTraceAsString());

php使用browscap判断浏览器客户端类型

官方项目地址:https://github.com/browscap/browscap

官方网站:https://browscap.org/

下载配置

wget "https://browscap.org/stream?q=PHP_BrowsCapINI' -O  /etc/php/browscap.ini

php.ini里面加入

browscap = /etc/php/browscap.ini

 

测试代码

        $browser = get_browser(null, true);
        print_r($browser);

测试结果

Array
(
    [browser_name_regex] => ~^mozilla/5\.0 \(.*linux.*android.4\.2.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*version/.*safari.*$~
    [browser_name_pattern] => Mozilla/5.0 (*Linux*Android?4.2*)*applewebkit*(*khtml*like*gecko*)*Version/*Safari*
    [parent] => Android Browser Generic
    [comment] => Android Browser Generic
    [browser] => Android
    [browser_maker] => Google Inc
    [platform] => Android
    [ismobiledevice] => 1
    [device_type] => Mobile Phone
    [device_pointing_method] => touchscreen
    [version] => 0.0
    [majorver] => 0
    [minorver] => 0
    [istablet] =>
    [crawler] =>
)

fstab生成脚本

index=1
fstab=fstab
for dev in /dev/nvme2n1p*; do
  eval $(blkid -o export "$dev" | grep -E 'UUID=|TYPE=')
  [ -z "$UUID" ] && continue

  case "$index" in
    1)
      mount_point="/boot/efi"
      fs_pass=1
      ;;
    2)
      mount_point="/boot"
      fs_pass=2
      ;;
    3)
      mount_point="none"
      fs_type="swap"
      options="sw"
      fs_pass=0
      ;;
    4)
      mount_point="/"
      fs_pass=1
      ;;
    *)
      mount_point="/mnt/$(basename "$dev")"
      fs_pass=2
      ;;
  esac

  # 类型判断
  fs_type="${TYPE}"
  options="defaults"

  # 如果是 swap 类型,单独处理
  if [ "$TYPE" = "swap" ] || [ "$fs_type" = "swap" ]; then
    echo "UUID=$UUID none swap sw 0 0" >> $fstab
  else
    mkdir -p "$mount_point"
    echo "UUID=$UUID $mount_point $fs_type $options 0 $fs_pass" >> fstab
  fi

  index=$((index+1))
done
[root@

解决 postfix 拒收邮件问题

sed -i 's/^smtpd_banner=.*/smtpd_banner=$myhostname ESMTP/' /etc/postfix/main.cf
sed -i 's/^smtpd_recipient_restrictions=.*/smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination/' /etc/postfix/main.cf

Another Looking-glass Server 魔改版

wget dl.kvm.la/linux/als.tgz -O - | tar zx
cd als; ./install.sh

修改了源码config/load_from_env.go为自动获取网卡IP

修改了ui/src/components/Speedtest/FileSpeedtest.vue 隐藏了IPv6下载文件,去掉了默认IP下载用于兼容绑定域名链接下载

IPXE alpine-ipxe启动自动脚本

#!ipxe
set mirror https://dl-cdn.alpinelinux.org/alpine/v3.19/releases/x86_64/boot/
set autoinstall  http://your-ip/alpine-ipxe    #http://your-ip/alpine-ipxe/autoinstall 

kernel ${mirror}/vmlinuz-lts alpine_dev=httpfs:${autoinstall} modules=loop,squashfs,sd-mod,usb-storage quiet
initrd ${mirror}/initramfs-lts
boot

使用rinse构建Linux系统

rinse是为 Debian/Ubuntu 开发的,专用于 Xen PV创建 (如 CentOS、AlmaLinux)的最小根文件系统,类似debootstrap构建deb系的操作系统。

项目官方地址https://salsa.debian.org/debian/rinse

在Alpine Docker容器部署

apk add docker
service docker start
docker run -it debian bash
apt update
apt install rinse  -y

安装完后在/etc/rinse目录可以看到支持

# ls  /etc/rinse
alma-9.packages  centos-7.packages  centos-8.packages  fedora-36.packages  fedora-37.packages  opensuse-15.2.packages  opensuse-15.4.packages  rinse.conf  rocky-8.packages  rocky-9.packages

Mirror源等配置

cat /etc/rinse.conf

 

构建AlmaLinux

mkdir  /alma-root
rinse --arch amd64 --distribution alma-9    --directory  /alma-root

 

构建完系统后,要对安装上内核以及grub引导等等, 当然在构建之前可以预先将分区处理好,

将 boot和boot/efi提前挂载好, 将网络配置还有 fstab hostname 等等通过chroot 进行部署调好。

 

反正 Linux 归根结底就是文件一把梭了,带上内核和 grub 设置完就行了, 理解通透后就是简单非常的简单。

另外还有mock  lorax livemedia-creator 等方案可用,甚至用 dnf 就能打包rhel系的系统, 类似Kickstart/Anaconda可以归类为原生安装了。

安装cloudflared 部署隧道

VERSION=$(curl -s https://api.github.com/repos/cloudflare/cloudflared/releases/latest | grep '"tag_name"' | cut -d '"' -f 4)
wget https://github.com/cloudflare/cloudflared/releases/download/${VERSION}/cloudflared-linux-amd64 -O /usr/bin/cloudflared
chmod 755  /usr/bin/cloudflared

https://one.dash.cloudflare.com/networks/tunnels 

菜单选择Networks->Tunnels然后添加

Another Looking-glass

吊鸡的遗产https://github.com/wikihost-opensource/als

防止删库找不到, 存一份本地文件。

mkdir /etc/als/
curl nxtrace.org/nt | bash
wget  https://github.com/samlm0/als/releases/download/111/als-linux-amd64 -O /etc/als/als
chmod 755 /etc/als/als
cat>/etc/als/als.conf<<EOF
#LISTEN_IP = 127.0.0.1
HTTP_PORT=8080
SPEEDTEST_FILE_LIST="100MB 500M 1GB" 
LOCATION="Tokyo, Japan"
ENABLE_SPEEDTEST=false

#PUBLIC_IPV4=
#PUBLIC_IPV6=
UTILITIES_PING=true
UTILITIES_IPERF3=true
UTILITIES_IPERF3_PORT_MIN=30000
UTILITIES_IPERF3_PORT_MAX=31000
UTILITIES_FAKESHELL=true
#SPONSOR_MESSAGE="Test message" 
EOF

cat>/etc/systemd/system/als.service<<EOF
[Unit]
Description=Another Looking-glass Server (ALS)
After=network.target

[Service]
Type=simple
WorkingDirectory=/etc/als
ExecStart=/etc/als/als
EnvironmentFile=/etc/als/als.conf
Restart=on-failure
User=nobody
Group=nobody

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable als --now

Apple Mac 集群管理方案

注册 Apple Business Manager (ABM) :https://business.apple.com

下载部署MDM(micromdm) :https://github.com/micromdm/micromdm

申请 Apple MDM Push 证书

在 Apple Developer Portal 中创建 MDM CSR
上传到 https://identity.apple.com/pushcert/ 获取 .pem
将 .pem 拆分为 mdm_push.pem 和 mdm_push.key 放入 certs 目录

配置启动服务micromdm

micromdm serve \
  -server-url=https://my-server-url \
  -api-key MySecretAPIKey \
  -filerepo /path/to/pkg/folder \
  -tls-cert /path/to/tls.crt \
  -tls-key  /path/to/tls.key

更多细节看官方文档https://github.com/micromdm/micromdm/blob/main/docs/user-guide/quickstart.md

 

登录 ABM 管理后台,添加 MDM Server,上传 MicroMDM 的公钥文件(Public Key from DEP setup)
下载 .p7m 文件,导入到 MicroMDM

 

一切配置好后可以通过micromdm的 api 对设备进行重启/抹除/重设密码等操作。

另外还有SimpleMDM可以选择

在设备里面可以看到监管机

用nginx stream四层转发做snmp代理

不想用 socat,水一下内容

stream {
        map $server_port $snmphost {
        3501 10.0.0.1;
        3502 10.0.0.2;
        3510 10.0.0.10;
        3511 10.0.0.11;
        3520 10.0.0.20;
        3523 10.0.0.23;
        3530 10.0.0.30;
        3531 10.0.0.31;
        3535 10.0.0.35;
        }
        server {
        listen 0.0.0.0:3500-3550 udp;  #低版本可能不支持,要每个端口写一遍
         proxy_connect_timeout 15s;
        proxy_timeout 30s;
        proxy_pass $snmphost:161;
        #allow 333.333.333.0/24;  #白名单IP段
        #deny all;
    }
}

WHMCS invoice PDF乱码解决办法

网络本来已经有了,但都是zip的,图方便搞了个tar.gz的包一键解压。

适用于whmcs8 及以上:

cd /home/你的whmcs目录
wget https://kvm.la/usr/uploads/2025/04/droidsansfallback.tgz -O - | tar xzv -C  vendor/tecnickcom/tcpdf/fonts/

登录WHMCS后台,依次点击Setup(设置)->General Settings(常规设置)->Inovices(发票),找到TCPDF Font Family(PDF字体),选择Custom,填入droidsansfallback

另外PDF的 logo 文件路径为 assets/img/logo.png

把文件丢进去之后账单 PDF 的问题全部就解决了。

字符画库工具DrawEnglish

在硬盘里面放了十多年了,输入文本变成ASCII字符图案的工具, 用于一些文本内容地方贴图。

基于windows 运行  DrawEnglish.zip

 

如Linux 下可以用figlet来实现。

用的机会少,但找起来又费时费力。