crontabによるエコーカール標準出力

crontabによるエコーカール標準出力

これは私のGithubアカウントに保存したcrontabスキーマです。

source ~/.profile
0 0 * * *
# More cron commands

練習でstdoutデータをcurlcrontabにリンクしてみました(Githubパスを汎用モードに変更しました)。

1)簡単なパイプを使用しようとしています。

curl https://raw.githubusercontent.com/user/repo/master/cronjobs | crontab

次のエラーが原因でこの操作は失敗します。

"-":0: 悪い方

crontabファイルが正しくないため、インストールできません。

2)区切り記号を使ってみました。

curl https://raw.githubusercontent.com/user/repo/master/cronjobs | cat > crontab

次のエラーが原因でこの操作は失敗します。

修正はありません。

三)curl出力をcrontab

echo "curl $(https://raw.githubusercontent.com/user/repo/master/cronjobs)" | crontab

次のエラーが原因でこの操作は失敗します。

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0...: command not found
100   505  100   505    0     0    804      0 --:--:-- --:--:-- --:--:--   804
(23) Failed writing body

stdoutからcrontabにデータを送信する3つの異なる方法を試しましたが、何も機能していないことがわかります。ファイルの代わりにcrontabに直接渡すにはcron.dどうすればよいですか?

答え1

"-":0: bad minute
errors in crontab file, can't install.

crontabこのエラーは、提供されたファイル/データが正しいcrontabファイルでない場合に発生します。 (そこにある数字に行番号があるようですが、なぜ時々ゼロが出るのかわかりません。)マニュアルページcrontab(5)説明する:

crontabのアクティブな行は、環境設定またはcronコマンドです。環境設定は次のとおりです。 name = value 等号(=)の周囲のスペースはオプションです。

cron コマンドの形式は V7 標準に似ており、多くのアップコンパチブル拡張があります。各行には5つの時間と日付フィールドがあり、その後にユーザー名(システムcrontabファイルの場合)、コマンドが続きます。

したがって、入力した内容は次のいずれかではない可能性があります。

いいね:

$ crontab <<EOF
SHELL=/bin/bash
* * * * * echo foo
EOF

これはない:

$ echo "foo" |crontab
"-":1: bad minute
errors in crontab file, can't install.

2)これはhere-docではなく、追加のcatを含むパイプとファイルへのリダイレクトですcrontab。名前付きコマンドは実行されませんcrontab

curl https://raw.githubusercontent.com/user/repo/master/cronjobs | cat > crontab

3) これにより、シェルでエラーが発生します。おそらくというコマンドはありませんhttps://raw.githubusercontent.com/user/repo/master/cronjobs

echo "curl $(https://raw.githubusercontent.com/user/repo/master/cronjobs)" | crontab

答え2

最初の行、

source ~/.profile

crontabで有効な行ではありません:

$ echo "source ~/.profile" | crontab
"-":0: bad minute
errors in crontab file, can't install.

~/.profileログインシェルを実行しているかのようにソースコードを取得するには、次のようにシェルスクリプトを実行することをお勧めします。

0 0 * * * bash -l /path/to/script.sh

bash(for、for sh -l)の/bin/sh代わりに、またはおそらく

SHELL=/bin/bash
0 0 * * * source ~/.profile && bash /path/to/script.sh

しかし、~/.profilecronジョブからリソースを取得したい場合はまれです。スクリプトに設定する必要がある特定の環境変数(または変数セット)がある場合は、スクリプトでそれを設定してスクリプト自体を含めるのが最善です。

別の方法は、別の環境ファイルを使用してスクリプトを実行することです。

0 0 * * * BASH_ENV="$HOME/script.env" /path/to/script.sh

関連情報