crontab -e 不为该用户打开 crontab

crontab -e 不为该用户打开 crontab

几个月前,我设置了一些作业crontab,它们一直运行良好,直到几天前,我注意到其中一个作业没有运行。我刚刚尝试使用创建作业的用户检查 crontab 文件,使用crontab -e,但没有打开任何文件。终端快速切换到某个屏幕,然后返回到我输入命令的屏幕。它来回太快了,我根本看不到那里有什么。

我已经(以 sudo 身份)检查过/var/spool/cron/crontab/,发现有一个针对上述用户的文件,其中包含基本内容:

> DO NOT EDIT THIS FILE - edit the master and reinstall.
> (- installed on Wed Mar 21 00:12:22 2018)
> (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)

我注意到安装日期几乎就是我的 cron 作业停止的日期!也许系统出于某种原因需要重新启动...

我重新启动了机器并再次尝试:crontab -e,这次我收到来自Emacs(我相信是默认编辑器)的以下错误:

emacsclient: can't find socket; have you started the server?
To start the server in Emacs, type "M-x server-start".

Warning: due to a long standing Gtk+ bug
http://bugzilla.gnome.org/show_bug.cgi?id=85715

.... [truncated]

所以我将默认编辑器更改为nano

user@user:~$ select-editor 

Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/code
  4. /usr/bin/emacs24
  5. /usr/bin/vim.tiny

Choose 1-5 [2]: 2

...并再次尝试:

user@user:~$ crontab -e

这给出了与最初描述的相同的问题——它似乎很快就打开了一个文件然后又将其关闭。

还有其他方法可以调试并(希望)恢复原始 crontab 文件吗?这些作业的设置非常复杂(请参阅下面的注释 #2):-/

我尝试使用以下方法查找正在运行的 crontab 任务这个答案,所以 cron 正在运行,但是我的 crontab 任务怎么办?

user@user:~$  ps -o pid,sess,cmd afx | egrep "( |/)cron( -f)?$"
1077  1077 /usr/sbin/cron -f

其他说明:

  • anacron 已安装
  • cron 任务本身在 crontab 文件中定义,而不是通过外部脚本定义
  • 一个 cronjob 使用了一个虚拟环境,它仍然存在并且可以工作,我可以手动执行作业

更新:

一些进一步检查的输出(主要由@steeldriver 请求)

user@user:~$ ls -l $(which crontab)
-rwxr-sr-x 1 root crontab 36080 Apr  5  2016 /usr/bin/crontab

那是不是setuid s在那里?我将其与进行了比较ping,因为我读到应该具有某种提升的权限:

user@user:~$ ls -l $(which ping)
-rwsr-xr-x 1 root root 44168 Mai  7  2014 /bin/ping

以 sudo身份运行crontab

user@user:~$ sudo crontab -e
[sudo] password for user: 
no crontab for root - using an empty one
No modification made

尝试以 sudo 形式执行所需命令,使用用户的设置:

user@user:~$ sudo -H -u user bash -c 'crontab -e'
No modification made

检查整个假脱机的权限是否符合预期:

user@user:~$ ls -ld /tmp
drwxrwxrwt 16 root root 36864 Apr  1 14:22 /tmp
user@user:~$ sudo namei -l /var/spool/cron/crontabs/$USER
f: /var/spool/cron/crontabs/user
drwxr-xr-x root    root    /
drwxr-xr-x root    root    var
drwxr-xr-x root    root    spool
drwxr-xr-x root    root    cron
drwx-wx--T root    crontab crontabs
-rw------- user    crontab user

答案1

只是为了发布结果,也许可以帮助那些看到同样事情的人 - 这是对我的原始问题下面的评论的总结

使用crontab -e是问题的开始 - 它没有做任何事情。

事实证明 Emacs 设置是原因所在(但我认为任何其他编辑器都可能导致此问题)。

按照@steeldriver 的建议尝试EDITOR=/bin/nano crontab -e(尝试强制 crontab 使用纳米没有帮助。

我录制了一个屏幕录像并停在文件快速打开的帧上 - 这是 Emacs 的启动画面。

中的某些设置~/.profile导致 Emacs 守护进程劫持对编辑器的调用。删除这些设置并重新启动后,crontab -e用户就可以正常工作了。

这些设置似乎是这个错误复制粘贴的版本(在 Emacs wiki 上找到):

export ALTERNATE_EDITOR=""
export EDITOR="emacsclient -t"                  # $EDITOR should open in terminal
export VISUAL="emacsclient -c -a emacs"         # $VISUAL opens in GUI with non-daemon as alternate

[我不记得错误到底出在哪里]

原始 crontab 文件丢失了。我仍然不明白这是怎么发生的

相关内容