wsl 定时任务 crontab权限
2026-09-13 20:12:59 # wsl

可能有一些乱,但是不影响整体思路。

安装 wsl

首先在windows上 打开 启动或关闭windows功能 选择 适用于 Linux 的 windows 子系统 打勾

然后取 windows应用市场 搜索 wsl ,下载你喜欢的一个 linux子系统

我这边安装了一个 debian,一个ubuntu。

如果你没有开启适用于 Linux 的 windows 子系统 是无法安装的。

记得一定要安装windows terminal 这个太提升体验了

配置linux子系统

进入 debian系统

挂载windows和linux的共享盘

可以先在linux子系统和windows之间建立一个共享盘

挂载 windows D盘的wsl_linux 到 debian到 win10目录

1
ln -s /mnt/d/wsl_linux ~/win10 

换国内源

清华源地址:https://mirrors.tuna.tsinghua.edu.cn/help/debian/

这是debian10

在windows中 创建一个 sources.list ,同样也可以在linux下创建,看你喜欢

把内容直接复制到sources.list 里面,因为无法拉去 https ,所以可以吧所有的https改为http

1
2
3
4
5
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
deb http://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free

然后把 文件复制到 /etc/apt中

1
2
3
4
5
6
7
8
9
10
sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak
sudo cp ~/win10/sources.list /etc/apt/sources.list
sudo apt update
#安装 ca证书 就可以拉去 https
sudo apt install apt-transport-https ca-certificates
#此时就可以修改所有http为 https了
# 然后在执行一次
sudo apt update
# 安装一些我需要的软件
sudo apt install crul wget vim -y

此时debian的系统就调试的差不多了。

设置定时任务 crontab 及其权限

设置定时任务 crontab ,因为crontab定时任务的命令网上太多了一搜一大堆,我这里就不复制,粘贴了。

编辑定时任务

1
2
3
4
5
6
7
8
# 第一次 他需要让你选择打开使用的编辑器 选择 vim就好了 或者 选择自己熟悉的
crontab -e
0 21 * * * cd /home/libai/fping-4.2/src/ && sudo /bin/bash /home/libai/fping-4.2/src/cf.sh >> /var/log/cf_log.log
# 查看
crontab -l
# 重启 这样才会设置任务 ### 认识错误 不用重启 他会自己去读取
sudo service cron restart # debian
sudo systemctl restart crond.service # centos

我的这个任务是每天晚上九点 执行一次。

因为执行命令需要root权限。我们需要设置执行我们这个命令时候,不需要输入密码。

设置 visudo ,定时任务权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 打开 visudo
sudo visudo
# 在末尾添加 这个用的是nano编辑器
%sudo ALL=NOPASSWD: /etc/init.d/cron start
%sudo ALL=NOPASSWD: /bin/bash /home/libai/fping-4.2/src/cf.sh
# 这里的命令要和上面crontab -e 命令保持一致 路径也一样 不然还是要输入密码的
# 路径 和 目录写清楚 可从下面参考里面看详细的visudo命令解释
# who where=(whom) commands
# 用户 主机=(以谁的身份) commands
# nano 命令
# 保存
Ctrl+O 然后回车一下就可以了
# 推出
Ctrl+X

此时定时任务就可以起飞了,同时把任务日志保存一下,看看是不是真的运行了。同时运行有什么问题,也可以处理。** >> /var/log/cf_log.log** 注意创建此文件同时注意权限 chmod 777 cf_log.log

关闭linux子系统,windows开机启动

但是这样当我们关闭windows子系统的时候,整个就关闭了,就没有什么定时任务了,因此我们要创建一个windows的开启任务。

在windows下:

win+R 输入 shell:startup 打开目录

新建一个 快捷方式

输入 C:\Windows\System32\wsl.exe sudo /etc/init.d/cron start

你发现这个命令和我们上面visudo的添加第一个命令一致,但是我开机启动时,还是要让我输入密码。。。

需要输入密码是因为wsl默认启动我的ubuntu,修改默认启动顺序,如果你只有一个系统就不会出现这个情况或者你用的系统是你第一个安装应该也是没有问题的

查看、修改默认系统

1
2
3
4
5
6
7
8
9
10
11
PS C:\Users\dfk> wslconfig /list
适用于 Linux 的 Windows 子系统:
Ubuntu-20.04 (默认)
Debian
PS C:\Users\dfk> wslconfig /s Debian # 修改默认
PS C:\Users\dfk> wsl # 进入系统
libai@DESKTOP-3SJEOBV:/mnt/c/Users/dfk$ uname -a # 查看是否是 debian
Linux DESKTOP-3SJEOBV 4.4.0-18362-Microsoft #836-Microsoft Mon May 05 16:04:00 PST 2020 x86_64 GNU/Linux
libai@DESKTOP-3SJEOBV:/mnt/c/Users/dfk$ cat /etc/issue
Debian GNU/Linux 10 \n \l

命令帮助:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
对 Windows 上的 Linux 子系统进行操作管理

用途:
/l, /list [/all]
列出已注册的分发版。
/all - 有选择地列出所有分发版,包括
当前正在安装或卸载的分发版。

/s, /setdefault <DistributionName>
将该分发版设为默认。

/t, /terminate <DistributionName>
终止分发。

/u, /unregister <DistributionName>
取消分发版注册。

/upgrade <DistributionName>
将分发版升级至 WslFs 文件系统格式。

最后再次执行 快捷方式 看看 要不要密码

不要了 完美了。。。。。。

查看windows是否开启

查看 任务管理系统,里面有没有一个cron的进程,有就是成功了的。

参考:

  1. sudo和它的编辑工具visudo
  2. Windows使用WSL配置crontab定时任务
  3. How To Start/Stop/Restart Cron Service In Linux Centos 7