将 Crontab -e 与具有有限 shell 的非默认编辑器一起使用(无法导出变量或运行编辑器)

将 Crontab -e 与具有有限 shell 的非默认编辑器一起使用(无法导出变量或运行编辑器)

我有一个权限受到严格限制的用户。

虽然我可以修改我的 crontab,但默认编辑器是nano,当您习惯vi并且不想破坏生产环境时,这可能会成为一个真正的问题。

我无法导出变量,也无法声明变量,所以export EDITOR='vi'或者EDITOR=vi crontab -e只是不起作用......而且我什至不允许直接运行 vi (或 nano),所以我不知道我实际上如何处理它。

有没有办法绕过这些限制?


为了了解我的局限性,登录消息是:

You are in a limited shell.
Type '?' or 'help' to get the list of allowed commands

和“?”的结果命令是

cd  clear  crontab  exit  help  history  lpath  ls  lsudo  php  pwd

编辑:忘记寻找我的操作系统版本

/proc/version 告诉我:
Linux 版本 2.6.26-2-amd64 (Debian 2.6.26-29) ([电子邮件受保护])(gcc 版本 4.1.3 20080704(预发布)( Debian 4.1.2-25)) #1 SMP 2012 年 3 月 4 日星期日 21:48:06 UTC

...并cat /etc/debian_version 告诉我5.0.10(什么?!)

我现在更习惯使用 Ubuntu,但还是有点惊讶。

答案1

从使用消息来看,您正在运行壳牌。这不是像 bash、ksh、zsh、BusyBox 等那样的 Bourne 风格 shell。它甚至不是像 rksh 或 rbash 这样的受限 shell。除了执行带有某些参数的一组固定命令之外,它没有变量、重定向或任何其他功能。

如果您能够运行 vi,则意味着 lshell 中存在错误或配置错误。它旨在防止运行任意命令。

既然你可以运行php,你也许可以解决这个问题。但显然管理员不希望你这样做。

crontab 通常很短,因此如果您想使用不同的编辑器对其进行编辑,请打开一个足够大的终端,通过 GUI 剪贴板将整个内容复制到本地计算机,然后在另一个方向进行编辑和复制。在 nano 中,确保关闭自动换行(Alt+L进行切换),以及(但这对于 crontab 来说不重要)自动缩进 ( Alt+ I)。

答案2

如果您能够将文件传入和传出系统,请备份当前的 crontab:

$ crontab -l >crontab.txt

如果您无法执行重定向,只需复制crontab -l并粘贴 crontab(确保一切都相同)。

然后,使用不那么锁定的系统上的 crontab 文本文件,在编辑器中更新它。

将文件传回并执行

$ crontab crontab.txt

在生产服务器上实施之前,应在相同的开发服务器上进行适当的测试,包括作业规范是否正确。请注意,crontab以这种方式加载 crontab替换当前的 crontab

我不承担任何责任。

相关内容