Cron

將 curl 標準輸出回顯到 crontab

  • July 16, 2018

這是我儲存在我的 Github 帳戶中的 crontab 模式:

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

作為練習,我嘗試將標準輸出數據通過管道傳輸curl到我的 crontab 中(我已將 Github 路徑更改為一般模式)。

**1)**我嘗試使用一個簡單的管道:

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

這失敗並出現錯誤:

“-”:0:糟糕的一分鐘

crontab 文件中的錯誤,無法安裝。

**2)**我嘗試使用heredoc:

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

這失敗並出現錯誤:

沒有進行任何修改

**3)**我嘗試將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

您可以看到我已經嘗試了三種不同的方法將數據從標準輸出發送到 crontab,但沒有任何效果。如果我想將它直接傳遞給 crontab 而不是cron.d文件,我還剩下什麼?

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

crontab如果給出的文件/數據不是正確的 crontab 文件,則會出現此錯誤。(我認為那裡的數字是行號,但我不知道為什麼它有時會顯示為零。)手冊頁crontab(5)說:

crontab 中的活動行是環境設置或 cron 命令。環境設置的形式為: name = value 等號 (=) 周圍的空格是可選的…

cron 命令的格式類似於 V7 標準,具有許多向上兼容的擴展。每行有五個時間和日期欄位,後跟一個使用者名(如果這是系統 crontab 文件),然後是一個命令。

所以,大概,你輸入的東西不是其中任何一個。

還行吧:

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

這不是:

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

  1. 這不是 here-doc,只是一個帶有額外 cat 和重定向到文件的管道crontab。這不會執行名為crontab.
curl https://raw.githubusercontent.com/user/repo/master/cronjobs | cat > crontab

3)這應該給你一個來自shell的錯誤,你可能沒有一個名為https://raw.githubusercontent.com/user/repo/master/cronjobs.

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

引用自:https://unix.stackexchange.com/questions/417870