我创建了一个 cron 作业,用于在设定的时间触发 URL,进而启动产品导入脚本。但由于某种原因,带有参数的触发 URL 的一部分被删除了。
我这样设置 cron 任务:
/usr/bin/wget -O /dev/null http://domain.nl/wp-cron.php?import_key=XXXXXXXXXX&import_id=3&action=processing
但它只运行http://domain.nl/wp-cron.php?import_key=XXXXXXXXXX
。实际上告诉脚本要做什么的最后一部分在哪里?
谁知道它为什么会这样表现以及如何让它发挥作用?
答案1
“与”字符 ( &
) 在 Linux 中实际上有某种含义(在兼容 Bourne 的 shell 中)。它的意思是:将命令作为后台任务运行。
因此,您实际上是在告诉 cron/usr/bin/wget -O /dev/null http://domain.nl/wp-cron.php?import_key=XXXXXXXXXX
在后台运行,然后执行action=processing
。 这就是 cron 为您做的事情 - 您告诉它做的事情。
为了解决这个问题,您需要转义该&
字符,以便将其作为 url 的一部分进行处理,而不是被解释为控制字符。
最简单的解决方案是将 url 括在引号中。
答案2
除了已经提到的 & 符号之外,您还必须小心%
cron 条目中的字符。%
cron 条目中的 将被解释为换行符,必须用反斜杠 ( \%
) 进行转义。确保import_key
您审查的 不包含这样的字符。此外,URL 中通常包含%
某些字符,例如空格 ( )、
=
等。