これは私のGithubアカウントに保存したcrontabスキーマです。
source ~/.profile
0 0 * * *
# More cron commands
練習でstdoutデータをcurl
crontabにリンクしてみました(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
しかし、~/.profile
cronジョブからリソースを取得したい場合はまれです。スクリプトに設定する必要がある特定の環境変数(または変数セット)がある場合は、スクリプトでそれを設定してスクリプト自体を含めるのが最善です。
別の方法は、別の環境ファイルを使用してスクリプトを実行することです。
0 0 * * * BASH_ENV="$HOME/script.env" /path/to/script.sh