我想在我的Mac上使用cron。我选择它而不是launchd
,因为我想将新知识应用于Linux。但是,我似乎无法让crontab -e
命令工作。它启动了vim,我输入了我的测试任务:
0-59 * * * * mollerhoj3 echo "Hello World"
但是在保存并退出 (:wq
) 之后,
crontab -l
说道:
No crontab for mollerhoj3
我做错了什么?
只需按照以下步骤操作:
crontab -e
。输入您的cron作业,例如:
30 * * * * /usr/bin/curl --silent --compressed http://example.com/crawlink.php
按 Esc 键退出 vim 的插入模式。
crontab: installing new crontab
。 您可以使用 crontab -l
验证 crontab 文件。请注意,根据您的 ~/.vimrc
文件的内容,此方法可能无法正常工作。
export EDITOR=nano
。 - Hanzaplastique:x
,它更短,意思相同。 - Nicklas A.sudo touch /etc/crontab
- dansomething我从未遇到过这个问题,但我创建了一个~/.crontab文件并进行编辑(这使我可以备份它,无论是使用Time Machine还是其他方法),然后运行
crontab ~/.crontab
在许多不同版本的Unix系统上,它已经为我工作了20多年。
crontab ~/.crontab
只是将文件中的指令安装,它可以被命名为任何名称,都会“起作用”,但 crontab -e
永远不会编辑 ~/.crontab
或你选择的其他文件。请阅读 man crontab
。你甚至可以删除 ~/crontab
,你的定时任务依旧可以正常运行。 - cmroanirgo~/.crontab
。 - Keith Thompson注意:使用ZZ
命令的答案在我的Mavericks系统上不起作用,但这可能是由于我的vim配置中的某些原因,因为如果我从原始的.vimrc
开始,接受的答案就能正常工作。如果其他解决方案无效,则我的答案可能适用于您。
根据crontab manpage,在MacOS X上,使用crontab -e
创建的临时crontab文件需要原地编辑。 Vim默认情况下不支持原地编辑(但它可能会进行一些特殊处理以支持crontab -e
),因此如果您的$EDITOR
环境变量设置为vi
(默认值)或vim
,则编辑crontab将始终失败。
要使Vim可以对文件进行原地编辑,您需要执行以下操作:
:setlocal nowritebackup
这样做可以使您在执行crontab -e
命令时,使用:wq
或ZZ
命令更新crontab。
您可以在您的.vimrc中添加一个自动命令来使其在编辑crontab时自动生效:
autocmd FileType crontab setlocal nowritebackup
另一种方法是将setlocal nowritebackup
添加到~/.vim/after/ftplugin/crontab.vim
中,如果启用了Filetype插件,则Vim将在编辑crontab文件时自动加载它。如果您要在多个平台上使用vim文件,还可以检查操作系统:
""In ~/.vim/after/ftplugin/crontab.vim
if has("mac")
setlocal nowritebackup
endif
crontab:" /usr/bin/vi " 以状态1退出
。 - Kshitij Saraogivi
更改为 vim
来解决了这个问题。我一直以为两者是相同的。 - Kshitij Saraogilaunchd
。尝试使用man launchctl
来开始。您需要创建特殊的XML文件来定义您的作业,并将它们放在具有特定权限的特定位置。launchctl load
即可。正如提到的一样,cron已被弃用(但仍受支持),推荐使用OS X的launchd。
这段内容摘自developer.apple.com
如果系统处于关闭或睡眠状态,则不会执行cron任务;直到下一个指定的时间到来才会运行。
如果通过设置StartCalendarInterval键来安排launchd任务,并且计算机在应该运行任务时处于睡眠状态,则当计算机唤醒时,您的任务将会运行。然而,如果计算机在任务应该运行时关闭,则任务不会执行,直到下一个指定的时间到来。
所有其他的launchd任务都会在计算机关闭或睡眠时被跳过。它们将不会运行,直到下一个指定的时间到来。
因此,如果计算机总是在作业的预定时间关闭,那么无论是cron作业还是launchd作业都不会运行。例如,如果您总是在晚上关闭计算机,则在凌晨1点运行的作业将永远不会运行。
EDITOR=emacs crontab -e
(我不知道为什么vim无法工作)。crontab -l
可以打印出cronjobs。现在,我只需要弄清楚为什么cronjobs仍然没有运行;-)sudo touch /etc/crontab
对我有用。 - sjy在用户的crontab(crontab -e
)中不要放置用户字段。
正确的cron格式是:
0-59 * * * * echo "Hello World"
用户字段的语法仅适用于/etc/crontab
文件:
0-59 * * * * mollerhoj3 echo "Hello World"
echo "Hello World"
的命令mollerhoj3
(当然会失败)。 - Keith Thompson另一种选择是完全不使用crontab -e
。我使用了以下方法:
(crontab -l && echo "1 1 * * * /path/to/my/script.sh") | crontab -
请注意,在| crontab -
之前打印的任何内容都将替换整个crontab文件,因此使用crontab -l && echo "<your new schedule>"
获取先前的内容和新计划。
export EDITOR=vim
alias crontab="VIM_CRONTAB=true crontab"
然后执行以下命令来使配置生效:source .bash_profile
接下来,在您的 .vimrc 文件中添加以下内容:if $VIM_CRONTAB == "true"
set nobackup
set nowritebackup
endif
这将禁用使用 vim 时的备份功能。现在可以使用 “crontab -e” 来添加或编辑 cron 任务了。crontab: installing new crontab
来源:sudo crontab -u {USERNAME} ~/{PATH_TO_CRONTAB_FILE}
sudo
。如果您已登录到 USERNAME
帐户,请运行 crontab ~/PATH_TO_CRONTAB_FILE
。 - Keith Thompson
crontab: installing new crontab
? - shx2crontab: no crontab for mollerhoj3
和DYLD_消息。 - mollerhoj