【问题标题】:Getting started with cronjobs on a Mac在 Mac 上开始使用 cronjobs
【发布时间】:2012-01-19 06:48:53
【问题描述】:

我正在尝试熟悉 cron 作业,并且我想我了解了基本概念(调度、语法等),但是,我似乎无法在我的 Mac 上使用 Terminal 来正确理解它——具体在哪里我找到了 Crontab?我应该如何引用脚本的路径?

我想做的是在远程机器上打一个 php 脚本 (http://...) - 这可能吗?

【问题讨论】:

    标签: macos terminal cron crontab


    【解决方案1】:

    键入crontab -e 编辑您的cron 表,键入crontab -l 列出当前内容。键入man 1 crontab 了解有关该命令的更多信息,键入man 5 crontab 了解有关cron 表文件格式的更多信息。

    例如每天10:00下载stackoverflow页面,运行crontab -e,输入这一行,然后保存/退出。输出将被写入主目录中的文件。

    0 10 * * * /usr/bin/curl -s http://stackoverflow.com > ~/stackoverflow.html
    

    【讨论】:

      【解决方案2】:

      要开始使用 launchd(而不是 cron),您需要首先创建一个空的 .plist 文件,例如 local.mytask.plist 并将其放在某个位置。 ~/Library/LaunchAgents 可能是个好地方。在文本编辑器中打开它并复制下面的代码

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
      <plist version="1.0">
      <dict>
      <key>KeepAlive</key>
      <false/>
      <key>Label</key>
      <string>local.mytask</string>
      <key>ProgramArguments</key>
      <array>
      <string>/opt/local/bin/wget</string>
      <string>http://someserver/somepage.php</string>
      </array>
      <key>StartInterval</key>
      <integer>300</integer>
      <key>RunAtLoad</key>
      <true />
      <key>StandardErrorPath</key>
      <string>/dev/null</string>
      <key>StandardOutPath</key>
      <string>/dev/null</string>
      </dict>
      </plist>
      

      然后从命令行“激活”文件:

      sudo launchctl load /Users/my_username/Library/LaunchAgents/local.mytask.plist
      

      要使其自动加载,请创建一个具有同一行的~/.launchd.conf 文件(减去sudo launch

      load /Users/my_username/Library/LaunchAgents/local.mytask.plist
      

      上面的说明是从www.davidlanier.com复制过来的,在这里转贴供大家参考。

      【讨论】:

      • 谢谢大家,您的所有回答都非常有帮助。我最终手动使用了 Launchd(Lingon 实际上对语法也很有帮助)。请注意,您不能在开箱即用的 mac 上使用 wget,所以我使用 curl 代替:/usr/bin/curl-smyserver.com/myscript.php</string>
      • 我注意到当文件实际位于 /Users/my_username/Library/LaunchAgents/local.mytask.plist 时,它会在您登录时自动加载,即使没有 ~/.launchd.conf
      【解决方案3】:

      万一其他人在 Snow Leopard 上与 cron 战斗时偶然发现了这个,我会挖掘这个旧线程。

      是的,launchd 应该是替代 cron,但实际上它不能做某些 cron 可以做的事情。

      Cron 没有很好地集成。如果它发送一条消息,它会以 /var/mail/user_name 结尾,Apple Mail 对此一无所知。

      crontab -e 抛出说“临时文件必须就地编辑”。显然 vim 与 vi 不兼容。然后,您可以执行 crontab "

      是的,花了一些时间来解决这一切:(

      【讨论】:

        【解决方案4】:

        launchd 功能强大,但您真的不想自己编写 plist。获取Lingon。它是一个开源的、精心设计的 GUI,用于创建和管理系统的已启动任务。

        【讨论】:

        • 虽然 Lingon 仍然非常有用且好用,但请注意,开发人员已宣布他已放弃进一步开发它。
        【解决方案5】:

        自 10.4 起,Cron 已被 launchd 取代。除非您计划在某个时候将它们移植到 Linux/Unix 系统,否则您可能应该使用它来编写任务。

        如果您还是决定使用 cron,请尝试输入 crontab -esudo crontab -e。这些将为您提供不同的 crontab 文件,前者用于您当前运行的用户,后者用于 root 用户。

        “点击”一个 URL 可以通过多种方式完成。根据您用来“命中”它的本地脚本,您可以使用该语言的一些内置方法/类。例如,Ruby 脚本会使用 net/http,但如果您只是编写 bash 脚本,也可以尝试 curl。执行man curl 以了解更多信息,但基本命令只是curl http://google.com

        【讨论】:

        • cron 在 10.4 及更高版本上默认不运行,您必须先启用它。从内存中,crond 手册页显示了如何执行此操作。
        • +1 很高兴知道。我什至没有想到它会被禁用。
        • 上次我读到,OS X 中的 cronjobs 是 通过 launchd 实现的,所以区别可能没有实际意义...
        • @Benjamin Oakes - 有趣的是,我没有处理很多,所以我可能在我的答案中使用了错误的术语(即“替换为”)。感谢您的澄清。
        【解决方案6】:

        您不想再使用 cron。正如其他人已经说过的那样,它已被 launchd 取代,并且 launchd 显然将成为 Mac OS X 的未来。

        MacTech 杂志最近在 launchd 上发表了一系列文章,我强烈建议您阅读它们。我知道我确实学到了很多东西。

        2009 年 9 月(第 25 卷,第 9 期) 25.09 MacEnterprise:为午餐推出

        2009 年 10 月,(第 25 卷,第 10 期) 雪豹、发射和午餐 更多已发布的食谱,以及雪豹的变化

        MacTech 上有其他文章,我建议您搜索他们的网站。

        【讨论】:

          猜你喜欢
          • 2014-03-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-09
          • 1970-01-01
          • 2023-03-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多