【问题标题】:How can I make crontab work with curl and ampersands in URLs?如何使 crontab 与 URL 中的 curl 和 & 符号一起使用?
【发布时间】:2017-09-16 02:32:49
【问题描述】:

我必须向 URL 发送一个 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

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

【问题讨论】:

    标签: curl cron


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      把你的双引号换成单引号,shell不会尝试解析url。

      【讨论】:

        【解决方案3】:

        如果您不使用引号,您的 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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-26
          • 1970-01-01
          • 1970-01-01
          • 2020-01-12
          相关资源
          最近更新 更多