나는윈도우 서버 2016cli를 사용하는 파일을 원격으로 실행해야 하는 머신SSH를 사용하여.
SSH 연결에서 로그아웃하면 SSH 사용자가 시작한 프로세스가 종료되는 것으로 알려져 있습니다. Linux 시스템에서는 nohup
또는 같은 솔루션을 사용하면 screen
로그오프 후에도 프로세스가 종료되지 않습니다.
이러한 솔루션은 Windows 시스템에서는 작동하지 않으며 로그아웃한 후 프로세스가 종료되는 것을 방지하는 방법을 찾고 있습니다.
- 내 고객은우분투 머신
- 내 Windows Server 2016이 실행됩니다.오픈SHH, 와 함께파워셸기본 쉘로
- 내 프로그램이 데몬 모드에서 작동하도록 설정되어 있으며 cmd 또는 powershell 창이 열려 있지 않습니다.
- 사용하면
Get-Process -Name proc_name
프로세스가 실제로 실행 중임을 보여줍니다. - SSH 로그아웃 후에 사용하면
Get-Process
그러한 프로세스가 생성되지 않습니다.
내가 시도한 것:
.exe
를 사용하여 파일을 실행합니다cmd
.- 해당 인수로 시작하는
.bat
및 파일을 실행합니다 ..ps
.exe
Windows 시스템에서 이 문제를 해결할 수 있는 방법이 있습니까?
답변1
솔루션을 찾기 위해 많은 시간을 보낸 후 PowerShell을 사용하여 완전히 올바른 방법을 찾았습니다.
이는 온라인에서 덜 사용되거나 문서화된 cmdlet 중 하나인 것처럼 보이며 이미 거대한 Wmi Objects
.
간단히 말해서:
, 및 foo.exe
인수를 사용하여 백그라운드에서 실행해야 하는 프로그램이 있다고 가정하면 정확한 명령을 사용해야 합니다.-a
-b
bar
Invoke-WmiMethod -Path 'Win32_Process' -Name Create -ArgumentList 'C:\Users\foo\Desktop\foo.exe -a -b bar'
물론 exe가 "알려진" exe(기본적으로 메모장이나 ping 등)이거나 사용자가 추가한 경우에는 exe -ArgumentList
이름을 사용할 때 전체 경로가 필요하지 않으며 exe 이름이면 충분합니다(메모장, ping 등). .).
추가 매개변수:
Invoke-WmiMethod
( SSH를 사용하지 않고 원격 시스템의 무언가 에 로컬 PS를 사용하는 좋은 방법 ) 과 같은 추가 매개변수를 지원합니다 -Credential
. -ComputerName
Invoke
-Impersonation
여기에 더 많은 문서가 나와 있습니다..
cmdlet 구문 설명 및 추가 cmdlet 도구:
- 인수
-Path
는 이름을 지정합니다WmiObject
. 있다수십의WmiObjects
, 각각 많은Methods
및 가 있습니다Properties
. - 인수
-Name
는 사용된 를 지시합니다Method
. Wmi-Objects
사용 가능한 모든 용도를 나열합니다Get-WmiObject -List
(이 방법으로는 필요한 개체를 찾기가 매우 어렵습니다).- 사용 가능한 모든 항목을 나열하고
Win32_Process
Methods
보려면Properties
Get-WmiObject -List |where{$_.name -match '^Win32_Process$'}
그러면 다음 구조의 출력이 반환됩니다.
NameSpace: ROOT\cimv2
Name Methods Properties
---- ------- ----------
Win32_Process {Create, Terminat... {Caption, CommandLine, CreationClassName, CreationDate...}
물론 을 사용하면 위 명령에서 사용한 것과 같은 사용 가능한 모든 항목과 사용 가능한 모든 항목 (사용하지 않은) |Select-Object -ExpandProperty (_your_property_here_)
이 표시됩니다 .Methods
Create
Properties