我使用以下命令每周更新我在 Ubuntu 上安装的 TeXLive 2019(从 CTAN 安装,而不是从软件包安装),以使我的软件包保持合理更新:
sudo /usr/local/texlive/2019/bin/x86_64-linux/tlmgr update --self -all
即使使用 shell 脚本 (sudo /root/bin/updatetexlive) 调用,这也按预期工作:
#!/bin/bash
/usr/local/texlive/2019/bin/x86_64-linux/tlmgr update --self -all
但是,当我使用 cron(sudo crontab -e)调用它时:
20 23 * * sun /root/bin/updatetexlive
(每周日晚上 11:20)
我收到了神秘的错误:
无法下载远程 TeX Live 数据库的校验和,但找到了本地副本,因此使用它。
您可能需要尝试指定一个明确的或不同的 CTAN 镜像,或者如果您在防火墙后面,您可能需要指定代理信息;请参阅 -repository 选项的信息和示例https://tug.org/texlive/doc/install-tl.html(以及 install-tl --help 的输出)。
tlmgr:软件包存储库 http://ctan.math.utah.edu/systems/texlive/tlnet(未经验证:未知)tlmgr:将备份保存到 /usr/local/texlive/2019/tlpkg/backups
一般来说,当 cron 在命令行上运行时出现故障时,通常是与调用 shell 相关的环境变量出了问题。因此,我查看了命令行上的导出列表,发现了三个可能的变量。我将它们设置在 crontab 中:
PATH="/usr/local/texlive/2019/bin/x86_64-linux:/usr/local/sbin:/usr/local/bin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
TEXMFDIST="/usr/local/texlive/2019/texmf-dist"
SHELL=/bin/bash
但是,我仍然收到上述错误。如何让 tlmgr 作为 cron 作业运行?
答案1
这是代理问题。需要将 http_proxy、http_proxy 和 ftp_proxy 变量设置为正确的值(在 crontab 中),这样就成功了。
http_proxy=http://10.22.31.1:3128
https_proxy=https://10.22.31.1:3128
ftp_proxy=ftp://10.22.31.1:3128
请注意,您必须指定完整的 URL 才能使其正常工作。
使用 cron 作业定期更新您的 tex 数据库应该是 Linux/Unix/Mac OSX 安装中推荐的标准操作程序。