Score:0

งานที่กำหนดเวลาไว้ของ Windows - งานที่มีสคริปต์ cmd ทำงาน แต่แอปคอนโซล .NET ไม่ทำงาน

ธง co

ฉันกำลังสร้างงานที่กำหนดเวลาไว้ของ Windows ในคอนเทนเนอร์ Docker ด้วย Powershell ในการทดสอบ ฉันมีแบตช์ไฟล์อย่างง่ายซึ่งเขียนวันที่/เวลาปัจจุบันลงในไฟล์ข้อความชั่วโมงละครั้ง มันทำงานได้อย่างสมบูรณ์แบบ:

RUN $action = New-ScheduledTaskAction -Execute 'C:\folder\task-tester.cmd'; \
    $trigger = New-ScheduledTaskTrigger -ทุกวัน -เวลา 00.00 น.; \
    $settings = ชุดงานกำหนดตารางเวลางานใหม่; \
    $task = Register-ScheduledTask -TaskName 'เขียนไปยังไฟล์ข้อความ' -User 'SYSTEM' -Trigger $trigger -Action $action -Settings $settings; \
    $task.Triggers.Repetition.Duration = 'P1D'; \
    $task.Triggers.Repetition.Interval = 'PT1H'; \
    $งาน | กำหนดตารางเวลางาน

เมื่อฉันพยายามเรียกใช้แอปคอนโซล .NET ไม่ทำงาน

RUN $action = New-ScheduledTaskAction -Execute 'C:\folder\thingy.exe' -WorkingDirectory 'C:\folder'; \
    $trigger = New-ScheduledTaskTrigger -ทุกวัน - เวลา 10.00 น.; \
    $settings = ชุดงานกำหนดตารางเวลางานใหม่; \
    Register-ScheduledTask -TaskName 'ชื่องาน' -User 'SYSTEM' -Trigger $trigger -Action $action -Settings $settings

โดยเฉพาะ งาน ดูเหมือนว่าจะทำงาน - วันที่/เวลา "เรียกใช้ครั้งล่าสุด" ถูกต้องและผลลัพธ์คือ 0 (ศูนย์) แต่แอปคอนโซลเองไม่ได้รับการดำเนินการ

ในคำสั่งด้านบน ฉันกำลังตั้งค่าไดเร็กทอรีการทำงาน (ข้อผิดพลาดทั่วไปกับแอปคอนโซล .NET)

ถ้าฉันใส่ SSH ลงในคอนเทนเนอร์ ฉันสามารถเรียกใช้งาน "thing.exe" และทำงานได้ตามปกติ ถ้าฉันเรียกใช้งานตามกำหนดเวลาด้วยตนเองผ่าน PowerShell เริ่มงานกำหนดการอีกครั้งดูเหมือนจะไม่มีอะไรเกิดขึ้น

ฉันได้ลองค้นหาบันทึกเหตุการณ์ด้วย PowerShell แล้ว แต่ไม่เห็นสิ่งใดที่เป็นประโยชน์ในทันที

การเปลี่ยนแปลงของคำสั่งด้านบนที่มีตัวเลือกที่ชัดเจนมากขึ้น เช่น ความเข้ากันได้และระดับการรันจะให้ผลลัพธ์เดียวกัน นั่นคือ งานไม่ได้รัน:

RUN $action = New-ScheduledTaskAction -Execute 'C:\folder\thingy.exe' -WorkingDirectory 'C:\folder' ; \
    $trigger = New-ScheduledTaskTrigger -ทุกวัน - เวลา 10.00 น.; \
    $settings = New-ScheduledTaskSettingsSet - ความเข้ากันได้ Win8; \
    $principal = New-ScheduledTaskPrincipal -UserID 'NT AUTHORITY\SYSTEM' -LogonType ServiceAccount -RunLevel สูงสุด; \
    Register-ScheduledTask -TaskName 'ชื่องาน' -Trigger $trigger -Action $action -Settings $settings -Principal $principal

มีใครเคยเจอแบบนี้บ้าง แล้วแก้ยังไง? หรือใครสามารถช่วยฉันรับข้อมูลการวินิจฉัยเพิ่มเติมจากคอนเทนเนอร์ด้วย PowerShell

ขอบคุณ!

Score:0
ธง co

สำหรับใครก็ตามที่อาจเจอเหตุการณ์นี้ในอนาคต:

ฉันมีมากกว่าหนึ่งกระบวนการทำงานในคอนเทนเนอร์ (ฉันรู้ว่านี่ไม่เหมาะ แต่ในกรณีนี้หลีกเลี่ยงไม่ได้) และปัญหาในกรณีของฉันคือตัวแปรสภาพแวดล้อมไม่พร้อมใช้งานสำหรับกระบวนการที่เรียกใช้โดยงานที่กำหนดเวลาไว้

เมื่อตัวแปรสภาพแวดล้อมถูกสร้างขึ้นเป็นส่วนหนึ่งของการสร้าง Docker env vars ใดๆ ที่สร้างขึ้นจะมองเห็นได้เฉพาะกับกระบวนการที่เริ่มโดย Docker เช่น IIS งานที่กำหนดเวลาไว้ของฉันจำเป็นต้องเข้าถึง env vars เดียวกันด้วย

วิธีแก้ไขคือเปลี่ยนจุดเริ่มต้นใน dockerfile เป็นสคริปต์ PowerShell ตามที่แนะนำโดย บทความนี้.

จุดเข้าใช้งาน ["powershell.exe", "C:\bootstrap.ps1"]

สคริปต์บูตสแตรปนี้สามารถทำสิ่งที่คุณต้องการ และในกรณีนี้ ช่วยให้ฉัน "ส่งเสริม" env vars ที่ส่งผ่านไปยังกระบวนการที่เริ่มต้นโดย Docker (ตอนนี้คือสคริปต์นี้) ไปยังระดับเครื่อง เพื่อให้กระบวนการอื่นๆ ในคอนเทนเนอร์มองเห็นได้

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา