【问题标题】:Crontab Not Working with Bash on Ubuntu on WindowsCrontab 无法在 Windows 上的 Ubuntu 上使用 Bash
【发布时间】:2017-05-07 23:01:19
【问题描述】:

我正在尝试安排一个 bash 脚本在 Windows 10 的 Windows 上的 Ubuntu 上与 Bash 一起运行。每次我编写 cron 时,我都会在终端中收到以下错误消息:

crontab: installing new crontab
/var/spool/cron/: mkstemp: Permission denied
crontab: edits left in /tmp/crontab.4q0z3i/crontab

这是 crontab 条目的样子:

# m h  dom mon dow   command
27 10 * * * /home/admin/test.sh > /home/admin/logs/test.log 2>&1   

这里到底发生了什么?

【问题讨论】:

  • 你的用户有权限写/var/spool/cron吗?您的用户是否有权使用cron
  • 嗨@Jdamian,我如何检查这个?在我的系统上,bash 中只设置了一个 unix 帐户。

标签: windows bash ubuntu cron windows-subsystem-for-linux


【解决方案1】:

您需要将自己添加到 crontab 组。

usermod -a -G crontab (username)

完成此操作后,您还需要确保 cron 正在运行。通常这是从 start cron 开始的,但是据我所知,upstart 不适用于 WSL,但 sudo cron 可以完成这项工作。

对此的一个警告是,一旦您关闭所有 bash 窗口,即使您的计算机运行,cron 也会停止运行。但是,只要您打开 bash 窗口并运行 cron,它就会按预期执行。

【讨论】:

  • 这有帮助,谢谢!对像我这样的人的一个提醒 - 重新启动您的 bash 会话以使其生效。
  • 另外,如果您希望 cron 和其他后台作业在关闭所有 bash 窗口后继续运行,您可以在启动时使用此 vb 脚本,它会保持隐藏的 bash 实例运行。 gist.github.com/leonelsr/cde77574519eb1fd672bc9690e01257e
  • 我一直在使用wabash and its daemon,但感谢您的提醒!
  • 使用 jeffpkamp 提到的脚本效果很好。为了自动启动 cron,我在 ~/.bashrc 文件中添加了 sudo cron,在 /etc/sudoers 文件中添加了 myuser ALL=(ALL:ALL) NOPASSWD:/usr/sbin/cron
  • 11101101b 它在 Windows 上启动 bash 时询问我的密码。有什么解决方法吗?
【解决方案2】:

要确保 cron 实际运行,您可以输入 service cron status。如果它当前没有运行,那么输入service cron start,你应该很高兴。

【讨论】:

  • 我认为是service cron status 而不是service status cron
  • 我想知道为什么连 cron 都需要启动并作为服务
  • @YakobUbaidi 这可能与 WSL 上一般不提供后台服务有关,例如 systemd
【解决方案3】:

github bug 上提到了这个的解决方法,现在似乎找不到了!

sudo crontab -u $USER -e

【讨论】:

    【解决方案4】:

    运行命令sudo service cron start并输入密码。

    【讨论】:

      【解决方案5】:

      尝试将此 powershell 命令放入 windows 任务中,看看会发生什么

      bash -c "rsync -acAXvc --delete --numeric-ids /mnt/d/no_movies/* rsync://10.66.6.66/danielle_no_movies"
      

      bash -c "command" 表示使用 linux 子系统 bash shell 运行此命令

      命令是“rsync --rsync_switches /mnt/windows_drive_letter/source_dir/* rsync://rsync_daemon_address/rsync_module”

      我只是想出了它,我仍在测试,所以我不能保证它会真正起作用。

      我现在从没有管理员权限的 powershell 窗口运行它,它报告它正在“发送增量文件列表”。任务管理器报告说有一个 rsync 进程正在使用驱动器 d 做很多事情:

      【讨论】:

        【解决方案6】:

        看来你的 crontab 确实有这样的 setgid 权限集,
        -rwxr-sr-x 1 root crontab 39024 May 5 2016 /usr/bin/crontab

        你应该这样做sudo chown <username> /usr/bin/crontab

        然后sudo chmod g+s /usr/bin/crontab

        您应该是 root 才能执行所有这些操作。

        【讨论】:

        • 嗨@Arduino Sentinel,仍​​然收到相同的错误消息。
        • 这个ls -l /var/spool/cron/crontabs的输出是什么
        • ls: cannot open directory /var/spool/cron/crontabs: Permission denied
        • 你是用sudo运行的吗?
        • 是的,在没有sudo 的情况下运行时,我收到以下消息:chmod: changing permissions of ‘/var/spool/cron/crontabs’: Operation not permitted
        【解决方案7】:

        看起来这应该使用 tmux 启动 Crontab 并且即使你关闭你的 bash 会话也让它生效(参见here)。我还没有尝试过(但很快就会尝试)。

        【讨论】:

          【解决方案8】:

          WSL 目前不支持后台进程。

          【讨论】:

          • 您可以添加参考吗?
          • 现在可以“从 Windows Insiders Build 17046 开始,WSL 支持后台任务(包括守护进程)”-Background Task Support in WSL
          • 确实如此,我已经启用了 cron 并安装了 MySql
          猜你喜欢
          • 2017-01-26
          • 1970-01-01
          • 2018-07-24
          • 2018-10-11
          • 2017-02-14
          • 1970-01-01
          • 1970-01-01
          • 2018-09-29
          • 2018-01-10
          相关资源
          最近更新 更多