首页 > 系统相关 >【原创】解决NasCab掉进程,NasCab进程维护

【原创】解决NasCab掉进程,NasCab进程维护

时间:2024-09-19 21:51:58浏览次数:12  
标签:log echo executable% rem 进程 维护 NasCab TITLE%

最近对象吐槽家里服务器又连不上,看不了考研视频了。
我掏出手机一试,确实连不上。家里的服务器是Win11平台,用NasCab管理的视频文件,然后通过frpc做的内网穿透。
我们在外面的图书馆,连不上无非是三种情况:服务器关机了、NasCab内网穿透插件掉了、NasCab进程掉了。
远程登录服务器,发现是NasCab进程掉了。。。点开NasCab,1分钟后对象又可以愉快的看考研视频了。
我想了想,决定写个脚本处理一下这事,因为我也时不时遇到NasCab掉进程的情况,我之前都是忽略了,但现在意识到这会影响体验。
思路:写一个维护进程的脚本,循环扫描nascab进程,检测不到就开启NasCab。
要求:该脚本不能受NasCab影响,同时该脚本也不能影响NasCab,那就需要另一个终端开启nascab,于是是bat->cmd->powershell->NasCab,这样只有powershell窗口会被影响,关掉cmd不会影响NasCab。
实现代码为:powershell -command "& {Start-Process %executable%}",其中executable为要执行的程序,就是nascab。
注意nascab的路径要加入path,路径为:C:\Users\hpl\AppData\Local\Programs\nascab\NasCab.exe,其中hpl替换为自己的用户名。
然后让这个脚本开机自启动就可以了。实现方法可用创建任务计划,也可直接拖入启动文件夹。

完整代码如下(全网首发,转载请保留出处):
取名Gaia是因为我爱玩零之曙光,里面的Gaia功能强大,hhh

点击查看代码
@echo off
rem 关闭echo命令显示

chcp 65001
rem 强制开启UTF-8,以支持中文显示

rem 为本脚本获取管理员权限
ver | findstr "10\.[0-9]\.[0-9]*" >nul && goto powershellAdmin

:mshtaAdmin
rem 原理是利用mshta运行vbscript脚本给bat文件提权
rem 这里使用了前后带引号的%~dpnx0来表示当前脚本,比原版的短文件名%~s0更可靠
rem 这里使用了两次Net session,第二次是检测是否提权成功,如果提权失败则跳转到failed标签
rem 这有效避免了提权失败之后bat文件继续执行的问题
Net session >nul 2>&1 || mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c ""%~dpnx0""","","runas",1)(window.close)&&exit
Net session >nul 2>&1 || goto failed
goto Admin

:powershellAdmin
rem 原理是利用powershell给bat文件提权
rem 这里使用了两次Net session,第二次是检测是否提权成功,如果提权失败则跳转到failed标签
rem 这有效避免了提权失败之后bat文件继续执行的问题
Net session >nul 2>&1 || powershell start-process \"%0\" -verb runas && exit
Net session >nul 2>&1 || goto failed
goto Admin

:failed
echo 提权失败,可能是杀毒软件拦截了提权操作,或者您没有同意UAC提权申请。
echo 建议您右键点击此脚本,选择“以管理员身份运行”。
echo 按任意键退出。
pause >nul
exit

:Admin
echo 本脚本处理所在路径:%0
echo 已获取管理员权限!
ping 127.0.0.1 -n 1 > nul
echo 如果此窗口标题处显示“管理员”字样,那就说明提权成功了。

echo 尝试将工作目录转移到软件目录...
cd /d %~dp0
rem 切换软件工作目录到软件所在文件夹
ping 127.0.0.1 -n 1 > nul
echo 目录转移成功!

rem 在后台运行本脚本
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin

rem 在这里设置目标程序
:: 程序路径需加入Path: C:\Users\hpl\AppData\Local\Programs\nascab\NasCab.exe
set executable=nascab
set /a counter=0
set TITLE=GaiaNasCab-background-admin[1.4]

rem 设置标题
title %TITLE%

echo -------------------------------------------------------------------------------- > %TITLE%.log
echo [%DATE%%TIME:~0,8%]本脚本[%TITLE%]正在以管理员模式运行! >> %TITLE%.log
echo 本脚本用于守护%executable%,保证其始终处于运行状态 >> %TITLE%.log
echo 更新于:2024年9月19日,by HPL. >> %TITLE%.log
echo -------------------------------------------------------------------------------- >> %TITLE%.log
echo: >> %TITLE%.log
echo:
echo --------------------------------------------------------------------------------
echo [%DATE%%TIME:~0,8%]本脚本[%TITLE%]正在以管理员模式运行!
ping 127.0.0.1 -n 1 > nul
echo 本脚本用于守护%executable%,保证其始终处于运行状态
ping 127.0.0.1 -n 1 > nul
echo 更新于:2024年9月19日,by HPL.
echo --------------------------------------------------------------------------------
echo:

echo [%DATE%%TIME:~0,8%]目标程序扫描中... >> %TITLE%.log
echo: >> %TITLE%.log
echo [%DATE%%TIME:~0,8%]目标程序扫描中...
echo:


:checkrun
tasklist|findstr /i "%executable%"
if errorlevel 1 (
echo [%DATE%%TIME:~0,8%]未检测到正在运行的%executable%,准备开启%executable%... >> %TITLE%.log
echo counter[%counter%] >> %TITLE%.log
echo -------------------------------------------------------------------------------- >> %TITLE%.log
echo [%DATE%%TIME:~0,8%]未检测到正在运行的%executable%,准备开启%executable%...
echo counter[%counter%]
echo --------------------------------------------------------------------------------
goto start
)
if errorlevel 0 (
rem 扫描时间建议5分钟以上,避免更新NasCab时被触发本程序
echo [%DATE%%TIME:~0,8%]已找到%executable%,循环扫描中[300s]...
echo counter[%counter%]
echo --------------------------------------------------------------------------------
ping 127.0.0.1 -n 300 > nul
goto checkrun
)
ping 127.0.0.1 -n 5 > nul

:start
echo: >> %TITLE%.log
echo [%DATE%%TIME:~0,8%]正在开启%executable%... >> %TITLE%.log
echo:
echo [%DATE%%TIME:~0,8%]正在开启%executable%...

rem 使用powershell后台运行NasCab(测试用)
::powershell -command "& {Start-Process %executable% -WindowStyle Hidden}"

rem 使用powershell前台运行NasCab(效果好,强烈推荐)
powershell -command "& {Start-Process %executable%}"

rem 前台运行NasCab(禁用,此方式NasCab会将程序log注入本bat所处的cmd,关掉本bat同时会关掉NasCab)
::start %executable%
ping 127.0.0.1 -n 1 > nul
echo:
echo [%DATE%%TIME:~0,8%]已成功开启%executable%! >> %TITLE%.log
echo [%DATE%%TIME:~0,8%]已成功开启%executable%!
echo counter[%counter%] >> %TITLE%.log
echo -------------------------------------------------------------------------------- >> %TITLE%.log
echo: >> %TITLE%.log
echo [%DATE%%TIME:~0,8%]5s后进入运行状态检测checkrun... >> %TITLE%.log
echo: >> %TITLE%.log
echo:
echo [%DATE%%TIME:~0,8%]5s后进入运行状态检测checkrun...
ping 127.0.0.1 -n 5 > nul
set /a counter+=1
goto checkrun

使用效果:
程序运行时会在bat所在目录生成log日志,可观察运行状态
image

标签:log,echo,executable%,rem,进程,维护,NasCab,TITLE%
From: https://www.cnblogs.com/chayasar/p/18419693

相关文章

  • Linux 基础入门操作 第九章 进程之间通讯信号量
    systemV的进程间通信之信号量9.3信号量信号量与其他进程间通信方式不大相同,它主要提供对进程间共享资源访问控制机制。相当于内存中的标志,进程可以根据它判定是否能够访问某些共享资源,同时,进程也可以修改该标志。除了用于访问控制外,还可用于进程同步。信号量有以下两......
  • 进程和线程基础内容
    什么是进程和线程?进程是指运行中的程序,在windows里可以在任务管理器中查看;线程是CPU调度的基本单位,进程可以看成程序执行的一个实例。一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间。进程就是线程的容器,需要线程利用进程中的一些资源,处理一个代码、指令。最终实现进......
  • 操作系统之进程
    概念进程是程序的一次执行过程,是动态的。程序则是存放在磁盘上的可执行文件,属于静态。进程是程序的实体运行过程,是系统进行资源分配和调度的独立单位。组成进程控制块(PCB):PID:进程标识符,用于唯一标识一个进程。UID:用户标识符,标识创建该进程的用户。进程控制和管理信息:用于......
  • P2710 数列/P2042 [NOI2005] 维护数列
    题意(以P2710为例)思路使用FHQ-Treap进行求解,清晰明了。对于insert,先将要插入的数建成一棵树,然后将这棵树放入FHQ-Treap中。对于delete,将要删除的树分离出来,然后把剩下的部分合并即可,将删除的树的树根丢到废弃节点的栈中以备以后使用(节约空间,不然MLE)。对于reverse,......
  • 26. 多进程理论、操作
    1.多进程相关理论1.1什么是进程进程是一个正在执行的任务或程序负责执行任务的是CPU(1)单任务单核CPU+多道技术实现多个进程的伪并发(2)多任务多个任务并发执行1.2 进程和程序的区别程序是代码的集合体进程是程序的执行过程1.3进程的调度算法(1)先来先服务算法 F......
  • docker 将进程内的文件复制到物理机路径
     在实际开发过程中,经常遇到使用docker部署数据库时  很多同学未将容器的路径跟服务器路径做一个映射,从而会导致很多问题出现,因此做个记录1.使用dockerps命令可以获取docker容器中所有正在运行的容器,如下图所示 2.运行 dockerexec-it8236262ad053/bin/bash  ......
  • 操作系统:进程间通信方式详解(下:消息队列、信号量、共享内存、套接字)
    每日一问:操作系统:进程间通信方式详解(下:消息队列、信号量、共享内存、套接字)进程间通信(Inter-ProcessCommunication,IPC)是操作系统中实现不同进程之间数据交换和协作的关键机制。本文详细介绍了几种常用的IPC方式,包括消息队列、信号量、共享内存和套接字。每种通信方式都......
  • GBase 8a 使用cpulimit限制进程序cpu占用
    cpulimit是一个限制进程的CPU使用率的工具(以百分比表示,而不是CPU时间)。其工作原理是为进程预设一个CPU占用率限制,并实时监控进程是否超出此限,若超出则让该进程暂停运行一段时间。它不会更改nice值或其他调度优先级设置,而是更改真实的CPU使用率。此外,它能够动态地、快速地适应整个......
  • PGSQL-查看sql正在运行的进程、查看表是否被锁、解锁表
    1.PGSQL-查看sql正在运行的进程SELECTdatname,pid,state,queryFROMpg_stat_activitywherestate='active'SELECTprocpid,START,now()-STARTASlap,current_queryFROM(SELECTbackendid,pg_stat_get_b......
  • 进程的内存分配
    在操作系统中,进程的内存分配是指操作系统为每个进程管理和分配所需的内存资源。内存管理是操作系统的核心功能之一,它涉及到为进程提供虚拟内存、物理内存分配、页表管理、以及地址转换等操作。操作系统通过虚拟内存机制,使每个进程都可以认为自己拥有独立的、连续的内存空间。1.......