Điểm:0

Tác vụ theo lịch trình của Windows - tác vụ với tập lệnh cmd chạy, nhưng ứng dụng bảng điều khiển .NET thì không

lá cờ co

Tôi đang tạo các tác vụ theo lịch trình của Windows trong bộ chứa Docker bằng Powershell. Để thử nghiệm, tôi có một tệp lô đơn giản ghi ngày/giờ hiện tại vào tệp văn bản mỗi giờ một lần. Điều này hoạt động hoàn hảo:

RUN $action = New-ScheduledTaskAction -Execute 'C:\folder\task-tester.cmd'; \
    $trigger = New-ScheduledTaskTrigger -Hàng ngày -Lúc 12 giờ sáng; \
    $settings = New-ScheduledTaskSettingsSet; \
    $task = Register-ScheduledTask -TaskName 'Ghi vào tệp văn bản' -Người dùng 'HỆ THỐNG' -Trigger $trigger -Action $action -Settings $settings; \
    $task.Triggers.Repetition.Duration = 'P1D'; \
    $task.Triggers.Repetition.Interval = 'PT1H'; \
    nhiệm vụ $ Set-ScheduledTask

Khi tôi cố chạy một ứng dụng bảng điều khiển .NET, nó không hoạt động.

RUN $action = New-ScheduledTaskAction -Execute 'C:\folder\thingy.exe' -WorkingDirectory 'C:\folder'; \
    $trigger = New-ScheduledTaskTrigger -Hàng ngày -Lúc 10 giờ sáng; \
    $settings = New-ScheduledTaskSettingsSet; \
    Register-ScheduledTask -TaskName 'Task name' -User 'SYSTEM' -Trigger $trigger -Action $action -Settings $settings

Cụ thể, các nhiệm vụ dường như chạy - ngày/giờ "lần chạy cuối cùng" là chính xác và kết quả là 0 (không), nhưng bản thân ứng dụng bảng điều khiển không được thực thi.

Trong lệnh trên, tôi đang đặt thư mục làm việc (một lỗi phổ biến với các ứng dụng bảng điều khiển .NET).

Nếu tôi SSH vào vùng chứa, tôi có thể thực thi "thing.exe" và nó hoạt động như mong đợi. Nếu tôi tự thực hiện tác vụ đã lên lịch qua PowerShell Start-ScheduleTask, một lần nữa, dường như không có gì xảy ra.

Tôi đã thử truy vấn nhật ký sự kiện bằng PowerShell, nhưng không thể thấy điều gì hữu ích ngay lập tức.

Một biến thể của lệnh trên với các tùy chọn rõ ràng hơn như khả năng tương thích và cấp độ chạy sẽ tạo ra kết quả tương tự - tức là tác vụ không chạy:

RUN $action = New-ScheduledTaskAction -Execute 'C:\folder\thingy.exe' -WorkingDirectory 'C:\folder' ; \
    $trigger = New-ScheduledTaskTrigger -Hàng ngày -Lúc 10 giờ sáng; \
    $settings = New-ScheduledTaskSettingsSet -Tương thích Win8; \
    $principal = New-ScheduledTaskPrincipal -UserID 'NT AUTHORITY\SYSTEM' -LogonType ServiceAccount -RunLevel Cao nhất; \
    Register-ScheduledTask -TaskName 'Task name' -Trigger $trigger -Action $action -Settings $settings -Principal $principal

Có ai gặp phải điều này trước đây, và giải quyết nó? Hoặc ai đó có thể giúp tôi lấy thêm thông tin chẩn đoán từ vùng chứa bằng PowerShell không?

Cảm ơn!

Điểm:0
lá cờ co

Đối với bất kỳ ai có thể gặp phải điều này trong tương lai:

Tôi có nhiều hơn một quy trình đang chạy trong vùng chứa (tôi biết, điều này không lý tưởng, nhưng trong trường hợp này là không thể tránh khỏi) và vấn đề trong trường hợp của tôi là các biến môi trường không khả dụng đối với các quy trình được gọi bởi các tác vụ theo lịch trình.

Khi các biến môi trường được tạo như một phần của bản dựng Docker, bất kỳ lọ env nào được tạo chỉ hiển thị đối với quy trình do Docker bắt đầu - ví dụ: IIS. Các tác vụ đã lên lịch của tôi cũng cần truy cập vào các lọ env đó.

Giải pháp là thay đổi điểm vào trong dockerfile thành tập lệnh PowerShell, như được đề xuất bởi bài viết này.

ENTRYPOINT ["powershell.exe", "C:\bootstrap.ps1"]

Tập lệnh bootstrap này có thể làm bất cứ điều gì bạn muốn và trong trường hợp này, cho phép tôi "quảng cáo" các vars env được chuyển đến quy trình do Docker bắt đầu (bây giờ là tập lệnh này) đến cấp độ máy để chúng hiển thị với các quy trình khác trong vùng chứa.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.