Я пытаюсь настроить задание cron под своим пользователем. Я запускаю crontab -e, вношу изменения и пытаюсь сохранить и выйти. Я получаю следующее сообщение об ошибке /var/spool/cron/: mkstemp: Permission denied
.
Соответствующий вывод ls -al /var/spool/cron/crontabs
drwxr-xr-x 2 root crontab 4096 Nov 4 10:09 .
drwxr-xr-x 5 root root 4096 Nov 19 2014 ..
-rw-rw-rw- 1 greg crontab 91 Nov 4 11:04 greg
-rw------- 1 root crontab 1231 Oct 29 16:18 root
Я могу напрямую редактировать файл greg и сохранять его, но я все равно не могу запустить задание, даже если перезапускаю cron после его обновления. Что мне нужно сделать, чтобы исправить эту проблему?
Вывод ls -lha $(which crontab)
:
-rwxr-sr-x 1 root crontab 36K Feb 8 2013 /usr/bin/crontab
Вывод groups greg
:
greg : greg adm sudo crontab lpadmin sambashare
решение1
Это решит вашу непосредственную проблему:
chmod u=rwx,g=wx,o=t /var/spool/cron/crontabs
Но если вы можете загрузить пакеты, более надежный способ исправить это — переустановить apt-get
соответствующий пакет:
root@ubuntu# dpkg-query -S /var/spool/cron/crontabs
cron: /var/spool/cron/crontabs
root@ubuntu# apt-get install --reinstall cron
предварительно убедившись, что все локальные изменения, внесенные вами в /etc/init/cron.conf
, /etc/default/cron
, и т. д., скопированы куда-то и затем применены повторно.
решение2
Решение, предложенное Марком Плотником, у меня не сработало, однако после добавления моего пользователя в crontab
группу оно заработало:
sudo adduser myname crontab
Чтобы изменения вступили в силу, вам придется выйти из системы и войти снова.
решение3
В Ubuntu 22.04:
crontab ~/admin/scripts/crontab.txt
/var/spool/cron/: mkstemp: Отказано в доступе
$ ls -lha $(which crontab)
-rwxr-sr-x 1 root crontab 39K 23 марта 2022 г. /usr/bin/crontab
~$ ls -lha /var/spool/cron/crontabs
ls: невозможно открыть каталог '/var/spool/cron/crontabs': Отказано в доступе
~$ sudo ls -lha /var/spool/cron/crontabs
всего 8.0К
drwx-wx--T 2 root systemd-journal 4.0K 2 марта 2023 г. .
drwxr-xr-x 3 root root 4.0K 22 июля 09:48 ..
Итак, нам нужны 2 группы для выполнения пользователем, чтобы получить привилегии:
sudo usermod -a -G systemd-journal <user>
sudo usermod -a -G systemd-journal <user>
Выйдите из системы и войдите снова под именем пользователя ...
crontab ~/admin/scripts/crontab.txt
crontab -l
0 */1 * * * ~/admin/scripts/elasticsearch_flush.sh > /dev/null 2>&1