1

내 컴퓨터에서 내 서버에서 매일 백업을 다운로드하는 작업이 있습니다. 기본적으로는 다음과 같습니다Windows 10 작업 스케줄러 : cmd를 표시하지 않고 bash 스크립트 실행

bash.exe -c "cd /mnt/d/server_backups && ./download_backup.sh" 

이 작품은, 그러나 그것은 항상 아니었다면 나는 (게임을하고있어 어떤이 중단 때문에 실제로 영화를보고, 나를 귀찮게하지 것이다, cmd를 창을 팝업 않습니다 , 일하고) 그냥 데스크톱에 던졌습니다.

"사용자가 로그온했는지 여부에 관계없이 실행"으로 변경하는 작업은 분명히 작동하지 않습니다. Windows 세션 0 (무엇이든지)은 bash로 통화를 시작할 수 없습니다.

다른 방법으로 cmd 창을 표시하지 않거나 그 자체로 결정하지 않고 내가 집중적으로 주력하고 다른 모든 것을 최소화하려는 다른 방법이 있습니까?

+1

콘솔 창이 아니고 CMD 창이 있습니다. 어떤 콘솔 어플리케이션과 마찬가지로 프로세스가 detached, 즉'DETACHED_PROCESS'를 실행하도록 플래그가 지정되지 않으면 bash.exe는 새로운 콘솔을 할당합니다. 그러나 이것을 테스트 한 결과, 프로세스 콘솔 핸들이 설정되지 않은 경우, 즉 프로세스가 콘솔에 연결되어야하는 경우 WSL이 초기화되지 않는 것으로 보입니다. 옵션은 윈도우가없는 콘솔 (예 :'CREATE_NO_WINDOW') 또는'STARTUPINFO''wShowWindow' 필드를 통해 숨겨진 창으로 생성하는 것입니다. – eryksun

+0

두 경우 모두 태스크 스케줄러가 해당 제어 레벨을 제공하지 않기 때문에 bash.exe 프로세스 작성 방법을 제어 할 수있는 Python 또는 PowerShell과 같은 스크립팅 언어가 필요합니다. – eryksun

+0

Linux 용 Windows Subsystem 대신 Cygwin을 사용하는 것을 상상할 수 있습니까? – Binarus

답변

2

당신은 다음과 같은 cmd.exe를 창없이 떠들썩한 파티를 시작하는 VBS 스크립트를 사용할 수 있습니다

hidden_launcher.vbs 여기

Set WinScriptHost = CreateObject("WScript.Shell") 
WinScriptHost.Run WScript.Arguments(0), 0 
Set WinScriptHost = Nothing 

, 우리는 첫번째 인수가 접수 실행하고 0 의미는 start the program hidden입니다.

지금 작업 스케줄러에서 작업을 설정할 :

  • 프로그램 실행 : C:\Path\to\hidden_launcher.vbs
  • 인수 :이 트릭을 할해야 "bash.exe -c 'cd /mnt/d/server_backups && ./download_backup.sh' "

을!

+0

좋아 보이지만 그것은 나를 위해 작동하지 않습니다. 작업 스케줄러 또는 .bat 파일 (테스트)에 넣는 것은 아무 것도하지 않고 .vbs 도발과 오류 "Subindex out of range"를 2 행의 char 1에서 실행합니다. Windows 프로그래밍 언어에 대한 단서가 없기 때문에 내가 틀린 일을하고 있는지 알지 못한다. – p4x

+1

작업 스케줄러 **의 인수 필드에''bash.exe -c 'cd/mnt/d/server_backups && ./download_backup.sh' "'를이 정확한 인용 부호로 넣었습니까? ** 큰 따옴표/작은 따옴표로 정확히 어떻게 쓰는지). 인수없이 스크립트를 실행하려고하면 첫 번째 arg (따라서 "범위를 벗어남"메시지)를 찾는 것처럼 오류가 발생합니다. 스크립트가 제대로 작동하는지 확인하고 싶다면''bash.exe -c '가 작동하도록 echo>'/ home/YOUR_USERNAME ' ""시도하면 리눅스 루트 폴더에 파일이 생성됩니다 – Aserre

+0

예 이 정확한 견해와 함께 논쟁, 나는 실제로 당신의 대답에서 직접 복사 - 붙여 넣기. – p4x