我从 Linuxmint 18 Cinnamon 64bit 恢复到 Linuxmint 17.3 Cinnamon 64bit 并且无法再创建 cron 作业。我有单独的 root (/) 和 home (/home/my-user-name) 分区,并且在我进行 17.3 安装时没有改动 home 分区。
我在创建 cron 作业时遇到了各种困难,所以我安装了 gnome-scheduler 并尝试以这种方式创建 cron 作业。我收到一个警告对话框,标题为
“警告:已执行任务的工作目录”
消息内容是
“关于已执行任务的工作目录的注意事项:循环任务将从主目录运行。”
我单击“确定”,该作业显示在终端中,如下所示:
$ crontab -l
* * * * * env DISPLAY=:0 /home/my-user-name/wallpaper_changer.sh >/dev/null 2>&1 # JOB_ID_4
Run Code Online (Sandbox Code Playgroud)
我的壁纸不会每分钟都改变。该脚本从命令行运行得很好,不产生任何输出。脚本的权限为 744 八进制。这在 Mint 18 下一切正常,但我每天只运行一次脚本。我将它设置为每分钟运行一次,仅用于测试目的。
如果我尝试正常的 cron 作业编辑方法,我会得到
$ crontab -e
Temporary crontab no longer owned by you.
Error while editing crontab
Run Code Online (Sandbox Code Playgroud)
然后我得到一个空的 nano 缓冲区,而不是充满注释行的普通 crontab 模板。当我尝试将 nano 缓冲区写入文件 /tmp/crontab.lmuwIe/crontab 时,我收到以下错误消息:
[写入 /tmp/lmuwIe/crontab 时出错:权限被拒绝]
最后,
$ ls -l /usr/bin/crontab
-rwsr-xr-x 1 root crontab 35984 Feb 9 2013 /usr/bin/crontab
Run Code Online (Sandbox Code Playgroud)
我还能再创建一份 cron 工作吗?
$ sudo ls -la /var/spool/cron/crontabs
total 12
drwx-wx--T 2 root crontab 4096 Sep 25 03:23 .
drwxr-xr-x 5 root root 4096 Sep 23 00:05 ..
-rw------- 1 root my-user-name 188 Sep 25 03:23 my-user-name
Run Code Online (Sandbox Code Playgroud)
@Gilles 嗯,我已经取得了很大的进步。我通过重新安装 cron 摆脱了所有错误的怪异性。现在一切正常,当我使用时
$ crontab -e
Run Code Online (Sandbox Code Playgroud)
除了我多年来一直使用的脚本无法运行。
但是另一个脚本确实运行了;所以我迷路了。
这是我现在所拥有的:
$ crontab -l
* * * * * env DISPLAY=:0.0 /home/my-user-name/wallpaper_changer.sh
* * * * * date >> /home/my-user-name/crontest.txt
Run Code Online (Sandbox Code Playgroud)
(我没有包括在 cron 作业之前的 20 多行注释。)
日期作业完全按预期运行,但 wallpaper_changer.sh 作业不执行任何操作。我已经用了很多年了,现在它不起作用了。该脚本在命令行中运行良好,并且过去在 cron 中运行良好。
$ ls -l /home/my-user-name/wallpaper_changer.sh
-rwxr-xr-x 1 my-user-name my-user-name 694 Jun 2 14:30 /home/my-user-name/wallpaper_changer.sh
$ echo $DISPLAY
:0.0
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?
小智 5
您需要编辑 crontab 二进制文件的权限,并将它们设置回全新安装时的状态。
ls -la /usr/bin/crontab
-rwsr-xr-x 1 root crontab 40264 Oct 7 2017 /usr/bin/crontab
Run Code Online (Sandbox Code Playgroud)
操作,以 root 身份执行或使用 sudo:
chmod g+s /usr/bin/crontab
chmod u-s /usr/bin/crontab
Run Code Online (Sandbox Code Playgroud)
ls -la /usr/bin/crontab
-rwxr-sr-x 1 root crontab 40264 Oct 7 2017 /usr/bin/crontab
Run Code Online (Sandbox Code Playgroud)
取自全新的工作安装,工作权限在安装过程中设置。
不知道为什么他们后来改变了。
Run Code Online (Sandbox Code Playgroud)$ sudo ls -la /var/spool/cron/crontabs total 12 drwx-wx--T 2 root crontab 4096 Sep 25 03:23 . drwxr-xr-x 5 root root 4096 Sep 23 00:05 .. -rw------- 1 root my-user-name 188 Sep 25 03:23 my-user-name
的归属/var/spool/cron/crontabs/my-user-name是错误的。你应该是主人。这可以解释为什么 cron 无法覆盖该文件。此外,该文件通常会在crontab组中,但我认为这并不重要。
您可以通过运行来修复此问题
sudo chown my-user-name /var/spool/cron/crontabs/my-user-name
Run Code Online (Sandbox Code Playgroud)
我不知道是什么原因导致了这种情况,也不明白它与系统降级有何关系。根本问题可能会导致其他问题。
| 归档时间: |
|
| 查看次数: |
2044 次 |
| 最近记录: |