2017-09-15 46 views
2

我發送GET請求URL如何讓crontab在URL中使用curl和&符號工作?

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 

請求我怎樣才能在不使用外部腳本這項工作?

回答

1

不使用引號和轉義&%\似乎工作。但我仍然想知道爲什麼使用引號不起作用/哪些字符需要轉義以及爲什麼。

(所以我不會接受這個答案)

1

單引號替換您的雙引號,和外殼不會嘗試解析URL。

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