IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    sh 脚本给 screen 传递命令【非交互模式】

    obaby发表于 2024-10-19 02:56:50
    love 0

    之所以要在 sh 中给 screen 传递命令是因为阿里云的 99 的服务器实在是太拉跨了,并且经常会出现各种诡异的 cpu 跑满的情况。目前上面部署了几个静态站点还有 umami 的统计。

    umami、moe-conter 都是通过 screen 启动的,这就导致如果服务器重启了就得重新启动 screen,然后在 screen 中运行命令来启动服务。

    阿里云的服务器经常莫名其妙 cpu 就 100 了,当然也可能是收到了攻击,但是具体情况感觉还是太频繁了,此时最简单的办法就是直接强制重启。

    如果直接把要执行的命令加到 screen 命令之后写入到 sh 脚本,命令无法正常运行。合格的写法应该是下面的样子(一种形式,还有其他形式):

    screen -S moe  -dmS
    screen -x -S moe -p 0 -X stuff "cd /root/Moe-Counter
    "
    screen -x -S moe -p 0 -X stuff "sh start.sh
    "

    注意screen -x -S moe -p 0 -X stuff “cd /root/Moe-Counter 一行指令是回车换行编写的,相当于把回车代入到了 cd 命令后面,这样写的好处是省去了插入回车,也可以用下面的写法:

    screen -xS screenName -p0 -X stuff $'\n'
    

    $’\n’ 代表回车,我觉得直接换行是最简单的。

    有了启动脚本,剩下的就是编辑服务,添加自启动功能:

    vim /etc/systemd/system/myautostart.service

    创建自定义服务,添加代码:

    [Unit]
    Description=My autostart Service
    After=network.target
    
    [Service]
    User=firefly
    ExecStart=/root/sh/start_all.sh
    Restart=always
    RestartSec=1
    
    [Install]
    WantedBy=multi-user.target

    重新加载服务:

    systemctl daemon-reload

    此时在重启,服务就可以自动启动了,省去了人工启动的麻烦。



沪ICP备19023445号-2号
友情链接