运行 由于 cron 作业命令 'characters not allowed',acme cron 作业进入 .sh 文件

Running acme cron job into .sh file due to 'characters not allowed' for cron job command

我的托管服务提供商面板不允许添加下一个 cron 作业命令:

"/home/username/.acme.sh"/acme.sh --cron --home "/home/username/.acme.sh" > /dev/null

由于“某些字符不允许用于 cron 作业命令”错误。

阅读 this post 之后,我试图了解如何从脚本 (~/run-acme.sh) 中 运行 并将其添加到 cron 作业中,但我不知道怎么做(示例使用 PHP 脚本)。

这里是run-acme.sh脚本的内容但是不知道在命令(source, . or bash)之前写什么 as this answer 建议:

选项 1:

#!/usr/bin/bash
bash "/home/username/.acme.sh"/acme.sh --cron --home "/home/username/.acme.sh" > /dev/null

选项 2:

#!/usr/bin/bash
source "/home/username/.acme.sh"/acme.sh --cron --home "/home/username/.acme.sh" > /dev/null

选项 3:

#!/usr/bin/bash
. "/home/username/.acme.sh"/acme.sh --cron --home "/home/username/.acme.sh" > /dev/null

以下哪个选项有效?他们 运行 结果相同吗?

重要说明:无权访问crontab/SSH

我相信您想要选项 1,因为您想要 运行 acme.sh 脚本。

选项 2 和选项 3 在 bash 中本质上是等价的,因为 source 是 bash 中 . 的别名。然而,不等同于sh中的,因为.存在于sh中,而source不存在(这是因为source 非 POSIX bash 扩展名)。

当使用source.时,这类似于在Haskell的GHCi或Scala的REPL中使用:load,或在load中Lisp 或 Clojure。 source. 命令告诉 shell 在当前 shell 的上下文中读取、解析和评估在单独的源文件 中编写的代码。本质上,它允许在单独文件中定义的函数和变量在“调用”shell 脚本的上下文中可用。

选项 1 的作用是 运行 acme.sh。您需要此选项是因为您不希望 acme.sh 脚本在当前 shell 中成为 运行(您可能已经在当前 shell 中定义了一些别名或函数这可能会导致命名冲突)。 运行 bash acme.sh类似于运行ning python my_code.py:bash解释器会执行acme.sh.

的内容

有关 source. 的更多信息,请参阅: