我想在我的 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 文件crontab -l
。但是请注意,根据文件的内容,这可能不起作用~/.vimrc
。
我从来没有遇到过这个问题,但我创建了一个 ~/.crontab 文件并编辑它(它允许我备份它,Time Machine 或其他),然后运行
crontab ~/.crontab
已经为我工作了 20 多年,涉及多种风格的 unix。
注意:说使用ZZ
命令的答案在我的 Mavericks 系统上对我不起作用,但这可能是由于我的 vim 配置中的某些问题,因为如果我从 pristine 开始.vimrc
,则接受的答案有效。如果其他解决方案不起作用,我的回答可能对您有用。
crontab -e
在 MacOS X 上,根据 crontab 手册页,需要就地编辑创建的 crontab 临时文件。Vim 默认不就地编辑(但它可能会做一些特殊情况来支持crontab -e
),所以如果你的$EDITOR
环境变量设置为vi
(默认)或vim
,编辑 crontab 总是会失败。
要让 Vim 就地编辑文件,您需要执行以下操作:
:setlocal nowritebackup
这应该使您能够在crontab -e
使用:wq
orZZ
命令时更新 crontab。
您可以在 .vimrc 中添加一个自动命令,以使其在编辑 crontab 时自动工作:
autocmd FileType crontab setlocal nowritebackup
另一种方法是添加setlocal nowritebackup
to ~/.vim/after/ftplugin/crontab.vim
,如果您启用了 Filetype 插件,它将在您编辑 crontab 文件时由 Vim 自动加载。如果您在多个平台上使用 vim 文件,还可以检查操作系统:
""In ~/.vim/after/ftplugin/crontab.vim
if has("mac")
setlocal nowritebackup
endif
不鼓励在 OS X 上使用 cron。 launchd
改为使用。尝试man launchctl
开始。您必须创建特殊的 XML 文件来定义您的作业,并将它们放在具有特定权限的特殊位置。
你通常只需要弄清楚launchctl load
http://nb.nathanamy.org/2012/07/schedule-jobs-using-launchd/
编辑
如果您确实想在 OS X 上使用 cron,请查看以下答案:https ://superuser.com/a/243944/2449
我做了两件事来解决这个问题。
EDITOR=emacs crontab -e
我不知道为什么 vim 不起作用)crontab -l
现在打印 cronjobs。现在我只需要弄清楚为什么 cronjobs 仍然没有运行 ;-)
如前所述,不推荐使用 cron(但受支持),建议 OS X 使用 launchd。
如果系统关闭或休眠,cron 作业不会执行;在下一个指定时间出现之前,它们不会运行。
如果您通过设置 StartCalendarInterval 键来安排已启动的作业,并且在作业应该运行时计算机处于睡眠状态,则您的作业将在计算机唤醒时运行。但是,如果在作业本应运行时机器关闭,则作业在下一个指定时间发生之前不会执行。
当计算机关闭或睡眠时,将跳过所有其他已启动的作业;在下一个指定时间出现之前,它们不会运行。
因此,如果计算机始终在作业的预定时间关闭,则 cron 作业和已启动的作业都不会运行。例如,如果您总是在晚上关闭计算机,则计划在凌晨 1 点运行的作业将永远不会运行。
在用户 crontab ( crontab -e
) 中不要放置用户字段。
正确的 cron 是:
0-59 * * * * echo "Hello World"
带有用户字段的语法/etc/crontab
仅适用于:
0-59 * * * * mollerhoj3 echo "Hello World"
该错误crontab: temp file must be edited in place
是由于 vim 处理备份文件的方式造成的。
要将 vim 与 cron 一起使用,请在.bash_profile中添加以下行
export EDITOR=vim
alias crontab="VIM_CRONTAB=true crontab"
来源文件:
source .bash_profile
然后在你的.vimrc添加:
if $VIM_CRONTAB == "true"
set nobackup
set nowritebackup
endif
这将在将 vim 与 cron 一起使用时禁用备份。您将能够使用crontab -e
添加/编辑 cronjobs。
成功保存 cronjob 后,您将看到以下消息:
crontab: installing new crontab
来源:
http ://drawohara.com/post/6344279/crontab-temp-file-must-be-edited-in-place在此处输入链接描述
其他选项是根本不使用crontab -e
。相反,我使用了:
(crontab -l && echo "1 1 * * * /path/to/my/script.sh") | crontab -
请注意,您之前打印的任何内容都| crontab -
将替换整个 crontab 文件,因此请使用它crontab -l && echo "<your new schedule>"
来获取以前的内容和新的计划。
由于一些权限问题,以前的帖子对我不起作用,我发现创建一个单独的 crontab 文件并使用 -u 参数将其添加到用户的 crontab 中,而 root 对我有用。
sudo crontab -u {USERNAME} ~/{PATH_TO_CRONTAB_FILE}
以上混合了正确的答案。对我来说有完全相同的错误有用的是:
1)编辑你的bash配置文件
$ cd ~ && vim .bashrc
2)在您的 bash 配置文件中,确保默认编辑器是 vim 而不是 vi(这会导致问题)
导出编辑器=vim
3)编辑你的vim配置文件
$cd ~ && vim .vimrc
4) 确保 set backupcopy 在你的 .vimrc 中是 yes
设置备份复制=是
5)重启终端
6) 现在尝试 crontab 编辑
$ crontab -e
10 * * * * 回声“你好世界”
您应该看到它正确地创建了 crontab 文件。如果您退出 vim(ZZ 或 :wq)并使用以下命令列出 crontab;您应该会看到新的 cron 作业。希望这可以帮助。
$ crontab -l
使用其他文本编辑器
env EDITOR=nano crontab -e
或者
env EDITOR=code crontab -e