如何在 Windows 10 和 11 上的 WSL 中自動啟動 Cron

已發表: 2022-01-29
一隻手拿著秒錶。
十億張照片/Shutterstock.com

Windows 有多種方法可以自動執行任務。 最常用的工具是 Windows 任務計劃程序,但如果您使用的是適用於 Linux 的 Windows 子系統 (WSL),那麼還有一個 cron 守護程序會在您的 WSL 安裝的後台運行任務。

Cron 默認不運行

在 Windows 10 和 Windows 11 上,cron 包含在 Ubuntu 等 Linux 環境中。 問題是 WSL 不會自動啟動 cron,這意味著默認情況下不會執行您的自動化任務。

要解決此問題,您可以在每次打開命令行時手動啟動 cron,但是手動啟動一個應該自動執行任務的工具有點忽略了這一點。

幸運的是,有一個簡單的方法可以解決這個問題,它需要使用任務計劃程序。

顯示 cron 未運行的 Windows WSL 終端窗口。

如果您從未在 Linux 中使用 cron 來運行任務,請查看我們之前關於如何在 Linux 上安排任務的教程。 出於我們的目的,我們將假設您已經在 WSL 安裝中創建了一些 cron 作業,並且您需要幫助以確保它們運行而不是一直照看 cron。

廣告

對於本教程,我們將使用sudo service來檢查和啟動 cron,這是在現代版本的 Ubuntu(WSL 最流行的發行版)上停止和啟動服務的推薦方法。

另外,請注意,本教程假定您對您的 WSL 版本具有管理員權限。 如果您是您 PC 的唯一用戶並且您自己啟用了 WSL,那麼您確實擁有管理員權限。

提示:這也適用於 Windows 11 上的 Linux 的 Windows 子系統,而不僅僅是在 Windows 10 上。

相關:如何在 Linux 上安排任務:Crontab 文件簡介

準備 Linux

我們要做的第一件事是讓計算機在沒有密碼的情況下啟動 cron。 當您啟動像 cron 這樣的服務時,您使用命令sudo service cron start 。 但是該命令需要密碼,Windows 啟動時無法訪問該密碼。 解決此問題的方法是關閉此命令的密碼要求。

為此,請打開 WSL 終端窗口並輸入sudo visudo 。 在鍵盤上按 Enter,輸入您的 Linux 密碼,然後再次按 Enter 鍵。 如果您使用的是 Ubuntu,這將使用初學者友好的 Nano 命令行文本編輯器打開“sudoers”文件。 sudoers 是一個供系統管理員使用的文件,可以更改用戶的權限和訪問權限。

將以下命令添加到 sudoers 文件的底部,然後按 Ctrl+o 保存,按 Ctrl+x 退出文件。

 %sudo ALL=NOPASSWD: /usr/sbin/service cron start

此 sudoers 命令表示任何有足夠權限使用 sudo 命令的用戶(應該包括您)都不需要密碼來運行命令sudo service cron start ,該命令啟動 cron 守護程序。

廣告

保存文件後,您可以通過鍵入sudo service cron start來檢查該命令是否正在執行它的工作,並且它應該在不詢問密碼的情況下啟動 cron。 如果可行,讓我們再次關閉 cron,以便我們可以測試我們在下一步中創建的任務是否正常工作。 為此,請運行sudo service cron stop

在 Windows 任務計劃程序中設置 Cron

這是我們實現 cron 自動化之旅的第一階段。 讓我們繼續使用任務計劃程序進入第 2 部分。 點擊鍵盤上的 Windows 鍵,然後搜索“任務計劃程序”。 啟動“任務計劃程序”快捷方式。

Windows 10 中的搜索結果顯示任務計劃程序作為選項。

當它啟動時,查看“操作”部分並選擇“創建基本任務”。

Windows 10 的任務計劃程序,帶有指向“創建基本任務”選項的紅色箭頭。

這將打開基本任務嚮導。 首先,它會要求您為任務命名並對其進行描述。 您可以在此處輸入任何您想要的內容。 我們將任務稱為“cron”,描述為“在系統啟動時啟動 cron 的任務”。 現在,點擊“下一步”。

在下一節中,我們開始談正事。 首先,Windows 想知道我們什麼時候想要運行任務。 選擇“當計算機啟動時”單選按鈕,然後單擊“下一步”。

Windows 10 中的一組單選按鈕,帶有指向“計算機啟動時”選項的紅色箭頭。

在下一節中,我們想要“啟動一個程序”。 默認情況下選擇該選項,因此單擊“下一步”。

Windows 10 任務計劃程序的程序選項,紅色箭頭指向程序路徑和附加參數文本輸入框。

廣告

現在,我們必須指定要運行的程序,即 WSL。 在“程序/腳本”文本輸入框中輸入以下內容: C:\Windows\System32\wsl.exe

我們還需要添加一些參數,因為到目前為止我們所做的只是啟動 WSL,但是在 WSL 內部,我們需要告訴 Ubuntu 啟動 cron。 因此,在“添加參數”框中,添加: sudo /usr/sbin/service cron start

Windows 10 的任務計劃程序的最終任務創建窗口帶有一個紅色箭頭,指向在完成時打開任務屬性窗口的選項。

再次單擊“下一步”,選中“單擊完成時打開屬性對話框”框,然後單擊“完成”。

帶有紅色箭頭的 Windows 任務屬性窗口,指向選項“無論用戶是否登錄都運行”。

任務已創建,但我們必須做最後一件事以確保一切正常。 將打開一個新窗口,其中顯示您創建的任務的摘要,但它僅設置為在您登錄時運行。 我們需要選擇“運行用戶是否登錄”的單選按鈕,然後按“確定”。

現在,讓我們以兩種方式測試我們的任務。 首先,在任務計劃程序的主窗口中,向下滾動直到看到您的任務名稱。 如果您使用名稱“cron”,則應在列表頂部找到它。 右鍵單擊任務並選擇“運行”。

顯示 cron 正在運行的終端窗口。

然後,回到你的 WSL 終端並輸入sudo service cron status ,它應該說 cron 正在運行。 如果不是,請仔細檢查您在前面的步驟中輸入的所有內容是否正確。

廣告

如果在第一次檢查中一切正常,那麼是時候進行大測試了。 重新啟動你的電腦,當你回來時,打開一個 WSL 終端並運行sudo service cron status ,它應該報告 cron 現在正在運行。

恭喜! 您已經邁出了進入一個更大的自動化世界的第一步。 隨著 cron 在後台運行,您在 WSL 中配置的 cronjobs 將自動按計劃運行。