首页 > 系统相关 >windows如何实现nohup?(未解决)

windows如何实现nohup?(未解决)

时间:2024-08-28 18:52:31浏览次数:6  
标签:nssm service windows Start nohup 解决 powershell pwsh

背景

今天在linux上搞后台任务,突发奇想powershell是否可以在关闭窗口后继续执行任务。

探究

以下的解决方法基本出自该帖https://www.v2ex.com/t/846505
测试脚本,每一秒打印一个数字,逐渐递增。

# PrintNumbers.ps1

# 初始化计数器
$i = 1

# 无限循环,直到脚本被中断
while ($true) {
    # 打印当前数字
    Write-Output '打印数字'
    Write-Output $i
    # 等待一秒
    Start-Sleep -Seconds 1
    
    # 增加计数器
    $i++
}

Start-Process(不推荐)

使用pwsh,powershell7,如果用的是powershell,可以把pwsh改一下试试。
下面这个命令可以在不打开窗口的情况下执行命令,比较鸡肋的是,不太好管理。

Start-Process pwsh.exe -RedirectStandardOutput ./output.log -ArgumentList ".\count.ps1" -WindowStyle Hidden

Start-Job(未成功)

start-job其实还算是比较好用的,但是只能实现后台执行,把窗口关了就不行了。

有人可能想到了,如果使用Start-Process加上Start-Job那不就成了吗
理论上是可以的,但是start-process是通过-ArgumentList来达到类似于执行命令的手段,实际上正如其名他只能传参数,而不能直接传命令来执行。

那么,我们再编写一个脚本兴许就可以了,用start-process打开新进程,并使用-WindowStyle Hidden隐藏窗口,由于脚本执行完会自动关闭进程,因此我们写一个Read-Host "Press Enter to exit..."来阻塞这个进程,避免瞬间被杀死。

反正我没试成功。

procrun

将应用程序做成服务

感觉有些复杂,一时半会不好折腾

nssm

同样是做成服务

以下的命令是cd到nssm所在的路径执行的,pwsh是powershell 7的命令,如果没有更新过,将这里改成powershell即可。

# Desired name of the service
$serviceName = 'countTest'

# Get the full path to powershell.exe
$powershellPath = ( Get-Command pwsh ).Source

# The path to the script you want to run as a service
$serviceScriptPath = C:\Users\acer\Desktop\count.ps1

# The arguments to pass to the powershell executable each time the service starts
$args = '-ExecutionPolicy Bypass -NoProfile -File "{0}"' -f $serviceScriptPath

# Install the service using nssm
./nssm install $serviceName $powershellPath $args
./nssm set $ServiceName AppStdout "C:\Users\acer\Desktop\stdout.log"
./nssm set $ServiceName AppStderr "C:\Users\acer\Desktop\stderr.log"
# See that the service is registered and check its status
Get-Service $serviceName

总体上还是让人满意的,但是不知道为什么,日志里只有pwsh启动的输出,没有脚本的输出。这样看来,反而是第一个Start-Process成功了。

结语

windows终端多少还是吃力,就像开发GUI应用通常偏向于Windows一样,开发脚本和命令都是更偏向于linux的,windows的命令用起来还是难受。
虽然使用场景不多,但是windows这个后台运行实在是有些繁琐。

标签:nssm,service,windows,Start,nohup,解决,powershell,pwsh
From: https://www.cnblogs.com/oldsaltfish/p/18385063

相关文章

  • Maui Blazor Windows 显示本地图片新方法更简单快速 支持.Net 8.0 最新版本
    目前仅Windows平台测试,安卓平台暂不支持,调用AppDomain.CurrentDomain.BaseDirectory,直接储存图片到wwwroot里的images文件夹内,在razor里直接使用<imgsrc="images/图片路径"/>即可privatevoidSetAvarta(){MainThread.BeginInvokeOnMainThread......
  • 局域网内两台设备只有一方可以ping通问题解决
    场景局域网内有两台笔记本,都是windows系统,都是连接的同一个路由器,在同一个网段中。但是其中的一台笔记本192.168.1.101,另外一台是192.168.1.100ping命令测试发现192.168.1.101无法ping通192.168.1.100这是为什么呢?排查与修复首先的两台电脑为了安全,防火墙都是开启的。既然......
  • YOLOv9改进策略【损失函数篇】| Slide Loss,解决简单样本和困难样本之间的不平衡问题
    一、本文介绍本文记录的是改进YOLOv9的损失函数,将其替换成SlideLoss,并详细说明了优化原因,注意事项等。SlideLoss函数可以有效地解决样本不平衡问题,为困难样本赋予更高的权重,使模型在训练过程中更加关注困难样本。若是在自己的数据集中发现容易样本的数量非常大,而困难样本......
  • 《星空》游戏崩溃弹窗提示“找不到pbvm115.dll文件”该怎么解决?星空游戏启动时闪退显
    在玩《星空》时,如果游戏崩溃并弹窗提示“找不到pbvm115.dll文件”,着实令人困扰。解决办法可以是在可靠的资源网站查找该文件并正确安装,或者对游戏进行完整性验证,也可检查相关驱动和运行库是否需要更新。本篇将为大家带来《星空》游戏崩溃弹窗提示“找不到pbvm115.dll文件”该怎......
  • 《绝地求生大逃杀》游戏启动时闪退弹窗“找不到devshl.dll”该怎么解决?PUBG游戏崩溃提
    在玩《绝地求生大逃杀》时,启动游戏却闪退并弹窗“找不到devshl.dll”,这十分让人头疼。要解决这个问题,可以尝试重新安装相关运行库,或者从可靠渠道获取该文件并正确放置到指定位置,也不排除是系统故障,需进行全面检查。本篇将为大家带来《绝地求生大逃杀》游戏启动时闪退弹窗“找不......
  • 【已解决】Vue Duplicate keys detected: ‘[object Object]’
    【已解决】VueDuplicatekeysdetected:‘[objectObject]’在Vue项目开发过程中,我们可能会遇到这样的报错:“Duplicatekeysdetected:‘[objectObject]’.Thismaycauseanupdateerror.”。这个错误通常发生在Vue的虚拟DOM进行渲染更新时,如果检测到重复的key值,就......
  • Windows版本下Redis安装与使用
    一、windows环境安装redis1、下载Redis压缩包2、解压到文件夹3、启动Redis服务4、打开Redis客户端进行连接5、使用一些基础操作来测试6、Redis常用的服务指令7、java项目集成redis8、常见报错和相关指令9、cmd指令查看关闭端口进程一、windows环境安装redis1、下载Redis......
  • 解决方案 | IrfanView如何滑动滚轮图像缩放?
    这是个bug,已经很多人反映了。目前没有比较好的解决方法,还是使用ctrl+滚轮最好。如果需要设置滚轮放大的话,按照下图即可,但是带来一个bug,你无法通过方向键或者菜单的箭头浏览下一张图片。综上所述,你有3个选择,1接受使用ctrl+滚轮进行放大2设置--关闭”显示所有支持的文件/缩略图......
  • Windows下安装Kafka3
    参考文章:Windows下安装Kafka3_kafka3window-CSDN博客安装配置Kafka首先在官网 ApacheKafka 下载Kafka二进制压缩包。无论是在CentOS还是在Windows下都是下载该压缩包,里面已经包含了KafkaLinux和windows平台下的可执行文件了。选择目前比较新的3.6.1版本下载将之前下载......
  • windows下rust中使用ffmpeg
    问题描述想要在rust中使用ffmpeg,首先得安装ffmpeg的开发包,就是include和lib。过程安装ffmpeg官网安装安装llvm官网安装这个我的环境中本来就已经安装了不确定是否真的是必须的。设置环境变量运行cargobuild前设置#powershell中,#D:\dev\ffmpeg-6.1目录下包含了includ......