这是我存储在我的 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
文件,我还剩下什么?
crontab
如果给出的文件/数据不是正确的 crontab 文件,则会出现此错误。(我认为那里的数字是行号,但我不知道为什么它有时会显示为零。)手册页crontab(5)
说:所以,大概,你输入的东西不是其中任何一个。
还行吧:
这不是:
2) 这不是 here-doc,只是一个带有额外 cat 和重定向到文件的管道
crontab
。这不会运行名为crontab
.3)这应该给你一个来自shell的错误,你可能没有一个名为
https://raw.githubusercontent.com/user/repo/master/cronjobs
.第一行,
不是一个人的 crontab 中的有效行:
如果您想像
~/.profile
运行登录 shell 一样获取源代码,请考虑将 shell 脚本启动为代替(对于
bash
,使用sh -l
对于/bin/sh
),或者可能但是,想要
~/.profile
在 cron 工作中获取资源是不寻常的。如果您有需要在脚本中设置的特定环境变量(或一组变量),最好在脚本中设置它们以保持脚本自包含。另一种方法是使用单独的环境文件并启动您的脚本