解决acme.sh安装之后直接运行报command not found的错误

acme.sh是一个能帮你在Linux/UNIX主机系统上便捷自动的申请和维护LET(Let’s Encrypt)证书的命令行工具,我从2018年春节期间开始使用其多个版本,一直为其运行的稳定性和功能的多样性感到高兴。在全球多个类似工具(包括LET官方Python版本)、以及数个在线的同类证书申请平台[1]之中,它的简捷高效令我着迷。然而在多台次服务器上的安装过程中却偶有几次出现程序安装完毕却不能直接使用其命令的状况,具体表现就是在命令行输入如acme.sh --version系统会报告找不到该命令的错误。这个情况在acme.sh官方讨论区和一些网络博客文章中均能看到,造成这个问题的大部分原因在于Linux环境下用户配置文件未及时更新引起的。

因网站从原布法罗机房迁移至Oracle公司的云服务器,需要把acme.sh也转移,但Oracle Cloud Service的云服务器并不象其它主机商那样直接给root管理员权限,这就使得acme.sh还是以安装到普通用户账号下[2]为宜。在运行完安装代码之后,直接在命令行输入acme.sh --version或其它带参数的命令后,系统给出command not found的错误信息,这时多数人的选择可能是重新启动机器,甚至是直接使用绝对路径来运行命令,如[3]

1
/root/.acme.sh/acme.sh –issue –dns dns_namesilo -d mydomain.tld

这样固然是一个解决办法,但acme.sh的证书安装以及定时任务功能均涉及到直接使用该命令的做法,总是加上绝对路径不会是一个好办法。于是从“找不到命令”的报错信息着手,判断问题的关键在于程序代码安装之后系统未能及时的根据系统环境配置找到路径,只需要帮助系统找到寻迹入口,那么问题即可解决而无须重新启动服务器。

执行代码source ~/.bashrc,然后再次输入acme.sh --version,这时将会得到具体的版本号而非命令找不到的错误,问题得以解决。

关于source命令和Linux系统登录过程中相关配置文件的执行问题,可参见source, ~/.bashrc, ~/.bash_profile详解GNU Bash Reference ManualLinux命令大全


  1. SSL FOR FREEFree SSLZeroSSL来此加密 ↩︎

  2. acme.sh可以独立非管理员账号运行也是该程序的特色之一,某种程度上说也提升了服务器的安全性 ↩︎

  3. 引用该博客原文中命令,已将相关信息隐去。 ↩︎