如何让crontab在URL中使用curl和&符号?

时间:2017-09-15 08:44:07

标签: curl cron

我必须向网址发送GET请求

http://localhost:8082/email-bulk?customer=Martin+Thoma&handler_pid=foo+f0a474c5-3cb1-4872-8689-c65cedb15bff&format_string=%7Breceived%3A%25y%25m%25d%7D+%7Bfoo%7D+%7Bfoo%7D+%7Bfoo%7D+%7Bfoo%7D%7Bfile_extension%7D&minutes_email=2
每分钟都有。所以我将crontab条目设置为

* * * * * /usr/bin/curl --silent "http://localhost:8082/email-bulk?customer=Martin+Thoma&handler_pid=foo+f0a474c5-3cb1-4872-8689-c65cedb15bff&format_string=%7Breceived%3A%25y%25m%25d%7D+%7Bfoo%7D+%7Bfoo%7D+%7Bfoo%7D+%7Bfoo%7D%7Bfile_extension%7D&minutes_email=2"

但是服务器没有收到任何请求。

使用

* * * * * /usr/bin/curl --silent http://localhost:8082/email-bulk?customer=Martin+Thoma&handler_pid=foo+f0a474c5-3cb1-4872-8689-c65cedb15bff&format_string=%7Breceived%3A%25y%25m%25d%7D+%7Bfoo%7D+%7Bfoo%7D+%7Bfoo%7D+%7Bfoo%7D%7Bfile_extension%7D&minutes_email=2

它收到

的请求
http://localhost:8082/email-bulk?customer=Martin+Thoma

如何在不使用外部脚本的情况下完成此工作?

3 个答案:

答案 0 :(得分:1)

不使用引号并使用&转义%\似乎有效。但我仍然想知道为什么使用引号不起作用/哪些字符需要转义以及为什么。

(所以我不接受这个答案)

答案 1 :(得分:1)

用单引号替换双引号,shell不会尝试解析网址。

答案 2 :(得分:0)

如果您不使用引号,您的shell会将您的字符串解释为由&拆分的一组命令,并在后台&之前执行所有操作。 (除非你逃避角色\&

要测试此功能,请在终端中尝试此操作

$ echo 1 & echo 2

输出类似于:

$ echo 1 & echo 2
[1] 2188
2
1
[1]  + done       echo 1

在您的示例中,将在后台执行的命令部分将是:

/usr/bin/curl --silent http://localhost:8082/email-bulk?customer=Martin+Thoma &

但是,因为字符串的其余部分不是有效命令,您将收到错误,例如:

$ echo 1 & foo   
[1] 2244
1
[1]  + done       echo 1
zsh: command not found: foo

来自男人bash

  

如果命令由控制操作符&终止,则shell在子shell中在后台执行命令。

因此,通过使用引号,您的shell不会解析字符串,例如:

$ echo "1 & foo"
1 & foo

取决于你的shell要逃脱的内容以及什么不是,请查看此答案以获取更多信息:https://unix.stackexchange.com/a/296147/53084