0

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

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

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

在阅读了这篇关于它的帖子后,我试图了解如何从脚本 ( ~/run-acme.sh) 运行它并将其添加到 cron 作业中,但不知道如何去做(该示例使用 PHP 脚本)。

这是run-acme.sh脚本的内容,但不知道在命令(或)之前要写什么,因为source这个答案表明:.bash

选项 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

4

1 回答 1

1

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

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

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

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

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

于 2021-01-25T23:30:12.437 回答