为什么我在使用vim时在OS X上没有crontab条目?

mol*_*hoj 75 macos vim cron

我想在我的Mac上使用cron.我选择它launchd,因为我希望能够在Linux上使用我的新知识.但是,我似乎无法让crontab -e命令工作.它启动vim,我进入我的测试工作:

0-59 * * * * mollerhoj3 echo "Hello World"
Run Code Online (Sandbox Code Playgroud)

但在保存和退出(:wq)后,

crontab -l
Run Code Online (Sandbox Code Playgroud)

说:

No crontab for mollerhoj3
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Cao*_*Dat 179

只需按以下步骤操作:

  1. 在终端:crontab -e.
  2. i进入vim的插入模式.
  3. 输入您的cron作业,例如:

    30 * * * * /usr/bin/curl --silent --compressed http://example.com/crawlink.php
    
    Run Code Online (Sandbox Code Playgroud)
  4. Esc退出vim的插入模式.

  5. 键入ZZ退出vim(必须是大写字母).
  6. 您应该看到以下消息:crontab: installing new crontab.您可以使用验证crontab文件crontab -l.

但请注意,这可能不起作用,具体取决于~/.vimrc文件的内容.

  • ZZ ..不知道那个,远远优于:wq! (39认同)
  • 在Mac上,您可以将nano设置为默认编辑器:`export EDITOR = nano` (12认同)
  • @NicklasA:x冒着混淆的风险:X - 几次作为noob unix dude我加密文件并退出,不知道我输入的加密密钥!ZZ似乎更安全:-) (10认同)
  • @JohnHunt您应该尝试`:x`,更少的角色:) (7认同)
  • @Nicklas A虽然打字比较复杂但你必须在中途释放换档键. (2认同)
  • 安装crontab后,您可能仍需要在最新版本的OS X上创建/ etc/crontab文件以启用cron守护程序.`sudo touch/etc/crontab` (2认同)
  • @NicklasA.ZZ实际上是较少的字符,因为您不必按Enter键 (2认同)

Mic*_*ell 69

我从来没有遇到过这个问题,但我创建了一个〜/ .crontab文件并对其进行编辑(允许我备份它,Time Machine或其他),然后运行

crontab ~/.crontab
Run Code Online (Sandbox Code Playgroud)

在许多unix版本中为我工作了20多年.

  • 这有点误导.`crontab~/.crontab`只是在文件中安装指令.它可以被命名为绝对任何东西并且它将"工作",但是`crontab -e`将永远不会编辑`〜/ .crontab`或您选择的任何文件.读`man crontab`.你甚至可以删除`〜/ crontab`,你的crons就可以运行了. (6认同)
  • @Rohmer不,你不能.所有这一切都是修改你的cron使用的当前运行的指令集; 它不会编辑这些指令所来自的文件.试试吧; 你会看到cron现在正在使用你编辑过的指令,但.crontab没有改变. (4认同)

Dav*_*ohm 38

:上面写着使用的答案ZZ命令我,我的小牛系统不能正常工作,但是这可能是由于我的vim的配置,因为如果我开始用原始的东西.vimrc,接受的答案工作.如果其他解决方案没有,我的回答可能对您有用.

在MacOS X上,根据crontab联机帮助页,创建的crontab临时文件crontab -e需要就地编辑.默认情况下,Vim不会就地编辑(但它可能会支持一些特殊情况crontab -e),因此如果您的$EDITOR环境变量设置为vi(默认值),或者vim编辑crontab将始终失败.

要让Vim就地编辑文件,您需要执行以下操作:

:setlocal nowritebackup
Run Code Online (Sandbox Code Playgroud)

这应该让你当你更新的crontab crontab -e:wqZZ命令.

您可以在.vimrc中添加自动命令,以便在编辑crontabs时自动执行此操作:

autocmd FileType crontab setlocal nowritebackup
Run Code Online (Sandbox Code Playgroud)

另一种方法是添加setlocal nowritebackupto ~/.vim/after/ftplugin/crontab.vim,如果你启用了Filetype插件,那么当你编辑crontab文件时,Vim会自动加载.如果您在多个平台上使用vim文件,还可以检查操作系统:

""In ~/.vim/after/ftplugin/crontab.vim
if has("mac")
  setlocal nowritebackup
endif
Run Code Online (Sandbox Code Playgroud)

  • 感谢您回答这个问题,接受的答案实际上并没有.我和Vim遇到了同样的问题你是对的,它与它的就地编辑有关. (4认同)

And*_*ndy 22

不建议在OS X上使用cron. launchd用来代替.尝试man launchctl开始吧.您必须创建定义作业的特殊XML文件,并将它们放在具有特定权限的特殊位置.

你通常只需要搞清楚 launchctl load

http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/launchctl.1.html

http://nb.nathanamy.org/2012/07/schedule-jobs-using-launchd/

编辑

如果您确实想在OS X上使用cron,请查看以下答案:https://superuser.com/a/243944/2449

  • 呸 - 美孚,凌晨!你在"你必须创建特殊的XML文件"中失去了我.1 crontab线更简单,它工作得很好.我将学习启动时,mac上的cron实际上已经死了. (22认同)
  • launchd是使用恕我直言的噩梦 (6认同)

mol*_*hoj 7

我做了两件事来解决这个问题.

  1. 我触摸了crontab文件,在此链接中描述了 coderwall.com/p/ry9jwg(感谢@Andy).
  2. 使用Emacs而不是我的默认vim :( EDITOR = emacs crontab -e我不知道为什么vim不起作用)

crontab -l现在打印cronjobs.现在我只需要弄清楚cronjobs为什么还没有运行;-)


Roo*_*uby 5

cron和launchd之间的区别

如前所述,cron已弃用(但受支持),建议OS X使用launchd.

这取自developer.apple.com

睡眠和关机的影响

如果系统关闭或睡眠,则不执行cron作业; 它们将在下一个指定时间发生之前运行.

如果通过设置StartCalendarInterval键来计划启动作业,并且计算机在作业运行时处于睡眠状态,则计算机唤醒时将运行作业.但是,如果作业应该运行时机器处于关闭状态,则直到下一个指定时间才会执行作业.

当计算机关闭或睡眠时,将跳过所有其他启动的作业; 它们将在下一个指定时间发生之前运行.

因此,如果计算机在作业的预定时间总是关闭,则cron作业和启动作业都不会运行.例如,如果您总是在晚上关闭计算机,则计划在凌晨1点运行的作业将永远不会运行.