web-dev-qa-db-ja.com

vimを使用しているときにOS Xでcrontabエントリがないのはなぜですか?

Macでcronを使用したいと思います。 Linuxでも新しい知識を使用できるようにしたいので、launchdよりも選択します。ただし、crontab -eコマンドが機能しないようです。 vimが起動し、テストジョブに入ります。

0-59 * * * * mollerhoj3 echo "Hello World"

ただし、保存して終了すると(:wq)、

crontab -l

言う:

No crontab for mollerhoj3

私は何を間違えていますか?

74
mollerhoj

次の手順に従ってください。

  1. ターミナルで:crontab -e
  2. 押す i vimの挿入モードに入ります。
  3. たとえば、cronジョブを入力します。

    30 * * * * /usr/bin/curl --silent --compressed http://example.com/crawlink.php
    
  4. 押す Esc vimの挿入モードを終了します。

  5. タイプ ZZ vimを終了します(大文字でなければなりません)。
  6. 次のメッセージが表示されるはずです:crontab: installing new crontabcrontab -lを使用して、crontabファイルを確認できます。

ただし、~/.vimrcファイルのコンテンツによっては、これが機能しない場合があります。

178
Cao Manh Dat

この問題は一度もありませんでしたが、〜/ .crontabファイルを作成して編集し(これにより、Time Machineなどのバックアップが可能になります)、実行します

crontab ~/.crontab

多くの種類のUNIXで20年以上働いてきました。

68

NOTEZZコマンドを使用するという回答は、Mavericksシステムでは機能しませんが、これはおそらく私のvim設定に何かがあります。なぜなら、私が.vimrcの初期状態から始めれば、受け入れられた答えが機能するからです。他の解決策がうまくいかない場合、私の答えはあなたのために働くかもしれません。

MacOS Xでは、crontabのマンページによると、crontab -eで作成されたcrontab一時ファイルをインプレースで編集する必要があります。 Vimはデフォルトではその場で編集しません(が、crontab -eをサポートするために特別なケースを行う可能性があります)。したがって、$EDITOR環境変数がvi(デフォルト)またはvim、crontabの編集は常に失敗します。

Vimでファイルをその場で編集するには、次の操作を行う必要があります。

:setlocal nowritebackup

crontab -eまたはZZコマンドを使用して:wqを実行すると、crontabを更新できるようになります。

.vimrcに自動コマンドを追加して、crontabの編集時にこれを自動的に機能させることができます。

autocmd FileType crontab setlocal nowritebackup

別の方法は、setlocal nowritebackup~/.vim/after/ftplugin/crontab.vimに追加することです。これは、Filetypeプラグインを有効にしている場合、crontabファイルを編集するときにVimによって自動的にロードされます。複数のプラットフォームでvimファイルを使用している場合は、OSを確認することもできます。

""In ~/.vim/after/ftplugin/crontab.vim
if has("mac")
  setlocal nowritebackup
endif
38
Dave Meybohm

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

22
Andy

この問題を解決するために2つのことをしました。

  1. このリンクで説明されているcrontabファイルに触れました coderwall.com/p/ry9jwg (@Andyに感謝)。
  2. デフォルトのvimの代わりにEmacsを使用しました:EDITOR = emacs crontab -e(vimが機能しない理由がわかりません)

crontab -lnowはcronjobsを出力します。今、私はcronジョブがまだ実行されていない理由を把握する必要があります;-)

7
mollerhoj

Cronとlaunchdの違い

前述のとおり、cronは非推奨(ただしサポートされています)であり、OS Xではlaunchdが推奨されます。

これは developer.Apple.com から取得されます

睡眠と電源切断の影響

システムがオフまたはスリープ状態の場合、cronジョブは実行されません。次の指定時間が発生するまで実行されません。

StartCalendarIntervalキーを設定してlaunchdジョブをスケジュールし、ジョブが実行されるべきときにコンピューターがスリープしている場合、コンピューターが起動するとジョブが実行されます。ただし、ジョブを実行すべきときにマシンがオフになっている場合、ジョブは次の指定された時間が発生するまで実行されません。

コンピューターの電源が切れているか、スリープ状態の場合、他のすべての起動ジョブはスキップされます。次の指定時間が発生するまで実行されません。

そのため、ジョブの予定時刻にコンピューターの電源が常に切れている場合、cronジョブと起動ジョブの両方が実行されることはありません。たとえば、常に夜間にコンピューターの電源を切る場合、午前1時に実行するようにスケジュールされたジョブ。実行されることはありません。

5
Roobie Nuby

ユーザーcrontab(crontab -e)にユーザーフィールドを入力しないでください。

正しいcronは:

0-59 * * * * echo "Hello World"

ユーザーフィールドを使用した構文は、/etc/crontab専用です。

0-59 * * * * mollerhoj3 echo "Hello World"
4
user3130043

エラーcrontab: temp file must be edited in placeは、vimがバックアップファイルを処理する方法が原因です。

Cronでvimを使用するには、。bash_profileに次の行を追加します
export EDITOR=vim
alias crontab="VIM_CRONTAB=true crontab"

ファイルを入手します。
source .bash_profile

そして、あなたの。vimrcに以下を追加します:
if $VIM_CRONTAB == "true" set nobackup set nowritebackup endif

これにより、cronでvimを使用するときにバックアップが無効になります。そして、crontab -eを使用してcronjobを追加/編集できるようになります。

Cronjobを正常に保存すると、次のメッセージが表示されます。
crontab: installing new crontab

ソース:
http://drawohara.com/post/6344279/crontab-temp-file-must-be-edited-in-placeリンクの説明をここに入力

1
Saurabh

以前の投稿はいくつかの許可の問題のために機能しなかったので、別のcrontabファイルを作成し、rootが機能している間に-uパラメーターを使用してユーザーのcrontabに追加することがわかりました。

Sudo crontab -u {USERNAME} ~/{PATH_TO_CRONTAB_FILE}
0
ShaneMit

上記には正解が混在しています。まったく同じエラーが発生したために私にとってうまくいったのは:

1)bash構成ファイルを編集します

$ cd〜&& vim .bashrc

2)bash構成ファイルで、デフォルトのエディターがviではなくvimであることを確認します(これにより問題が発生します)。

eDITOR = vimをエクスポート

3)vim configファイルを編集します

$ cd〜&& vim .vimrc

4).vimrcでset backupcopyがyesであることを確認します

backupcopy = yesを設定します

5)ターミナルを再起動します

6)crontab editを試してください

$ crontab -e

10 * * * * echo "hello world"

Crontabファイルが正しく作成されることがわかります。 vim(ZZまたは:wq)を終了し、次のコマンドでcrontabをリストした場合;新しいcronジョブが表示されるはずです。お役に立てれば。

$ crontab -l

0
Jimmy M.G. Lim