79

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

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

しかし、保存して終了した後 ( :wq)、

crontab -l

言います:

No crontab for mollerhoj3

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

4

12 に答える 12

42

:コマンドを使用するという答えはZZ、私のMavericksシステムでは機能しませんが、これはおそらくvim構成の何かが原因です。なぜなら、私が pristine から始めると.vimrc、受け入れられた答えが機能するからです。他の解決策がうまくいかない場合、私の答えはうまくいくかもしれません。

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

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

:setlocal nowritebackup

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

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

autocmd FileType crontab setlocal nowritebackup

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

""In ~/.vim/after/ftplugin/crontab.vim
if has("mac")
  setlocal nowritebackup
endif
于 2014-01-17T19:22:50.560 に答える
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.nathanmy.org/2012/07/schedule-jobs-using-launchd/

編集

本当に OS X で cron を使用したい場合は、次の回答を確認してください: https://superuser.com/a/243944/2449

于 2013-03-13T20:22:17.080 に答える
7

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

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

crontab -lcronジョブを出力するようになりました。今、私はcronjobsがまだ実行されていない理由を理解する必要があるだけです;-)

于 2013-03-13T23:11:36.880 に答える
6

cron と launchd の違い

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

これはdeveloper.apple.comから取得したものです。

スリープと電源オフの影響

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

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

コンピューターの電源がオフまたはスリープ状態の場合、他のすべての launchd ジョブはスキップされます。次に指定された時刻になるまで実行されません。

したがって、コンピュータがジョブのスケジュールされた時刻に常にオフになっていると、cron ジョブと launchd ジョブの両方が実行されません。たとえば、夜間に常にコンピュータの電源を切ると、午前 1 時に実行するようにスケジュールされたジョブが実行されることはありません。

于 2014-03-31T22:38:52.077 に答える
2

エラー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

これにより、vim を cron で使用する際のバックアップが無効になります。crontab -eまた、 cronjobs を追加/編集するために使用できるようになります。

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

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

于 2018-05-01T05:06:32.080 に答える
1

他のオプションは、まったく使用crontab -eしないことです。代わりに私は使用しました:

(crontab -l && echo "1 1  * * *  /path/to/my/script.sh") | crontab -

以前に印刷した| crontab -ものはすべて crontab ファイル全体を置き換えることに注意してくださいcrontab -l && echo "<your new schedule>"。以前のコンテンツと新しいスケジュールを取得するために使用してください。

于 2019-10-16T16:10:04.820 に答える
0

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

sudo crontab -u {USERNAME} ~/{PATH_TO_CRONTAB_FILE}
于 2016-09-13T21:14:16.710 に答える