后台进程和服务

邱秋 • 2024年04月06日 • 阅读:33 • windows linux

后台进程

For Linux /Mac

# 在后台运行命令,并将输出重定向到文件:
nohup /root/tes.sh > output.log &

# 在后台运行命令,并将输出和错误信息都重定向到文件:
nohup /root/tes.sh > output.log 2>&1 &

For windows

start /b c:\tetst.sh

在window powershell 7 中 可使用 Start-Process 启动一个后台进程

Start-Process -FilePath "C:\path\test.sh" -ArgumentList "arg1", "arg2" -WindowStyle Hidden
  • -FilePath 可选路径和文件名
  • -ArgumentList 传参
  • -WindowStyle 窗口的状态。 默认值为 Normal。 [Normal,Hidden,Minimized,Maximized]
  • -WorkingDirectory 进程启动目录
  • -RedirectStandardOutput 输入路径和文件名。 默认情况下,在控制台中显示该输出。
  • -RedirectStandardInput 输入输入文件的路径和文件名。 默认情况下,进程从键盘获取其输入。
  • -RedirectStandardError 出错信息的路径和文件名
  • -Environment 指定虚拟环境
  • -Confirm 是否确认
  • -Credential 凭证
  • -Verb RunAs 以管理员身份运行

更多: PowerShell

系统服务

For Linux

创建一个.service文件来描述你的服务。这个文件通常位于/etc/systemd/system/目录下。

内容可能如下所示:

[Unit]
Description=My Custom Service
After=network.target

[Service]
ExecStart=bash test.sh
Restart=always
User=yourusername
Group=yourgroupname
Environment=PATH=/usr/bin:/usr/local/bin
EnvironmentFile=-/etc/sysconfig/myservice
WorkingDirectory=/path/to/your

[Install]
WantedBy=multi-user.target

重新加载systemd配置:

在创建了新的.service文件之后,你需要告诉systemd重新加载配置:

sudo systemctl daemon-reload

启动并检查服务状态:

现在,你可以启动你的服务,并检查它的状态:

sudo systemctl start myservice
sudo systemctl status myservice

设置服务开机自启:

如果你想让你的服务在系统启动时自动运行,你可以使用enable命令:

sudo systemctl enable myservice

管理服务的其他命令:

停止服务:sudo systemctl stop myservice 重启服务:sudo systemctl restart myservice 查看服务是否开机自启:sudo systemctl is-enabled myservice 查看所有服务:sudo systemctl list-units --type=service

For windows

SC

# 新建一个服务
sc create NewService binpath= c:\windows\system32\NewServ.exe type= share start= auto depend= "+TDI NetBIOS" 
# 删除服务
sc delete newserv

sc 已经不再更新 : 相关文档

New-Service

New-Service 基于 PowerShell 7 新建一个名为TestService 服务

New-Service -Name "TestService" -BinaryPathName 'C:\WINDOWS\System32\svchost.exe -k netsvcs'

参数

  • -Name 指定服务的名称。 此参数是必需的。
  • -BinaryPathName 指定服务的可执行文件的路径。 此参数是必需的。
  • -Confirm 提示你在运行 cmdlet 之前进行确认。
  • -DependsOn 指定新服务所依赖的其他服务的名称。 若要输入多个服务名称,请使用逗号分隔这些名称。
  • -Description 指定服务的描述。
  • -DisplayName 指定服务的显示名称。
  • -SecurityDescriptorSddl 以 Sddl 格式指定服务的 SecurityDescriptor。
  • -StartupType 设置服务的启动类型 (AutomaticDelayedStart , 系统启动后不久启动)

可以使用变量:

$params = @{
  Name = "TestService"
  BinaryPathName = 'C:\WINDOWS\System32\svchost.exe -k netsvcs'
  DependsOn = "NetLogon"
  DisplayName = "Test Service"
  StartupType = "Manual"
  Description = "This is a test service."
}
New-Service @params

不支持 启动目录.

相关文档: 更多文档

我,秦始皇,打钱!