Почему эта работа cron не работает?
Я использую Ubuntu 14.04 и создал в следующем скрипте внутри /etc/cron.hourly
и сделал его исполняемым
имя файла: remove_old_tmux_resurrect_saves
#! /bin/bash
ls ~/.tmux/resurrect/* -1dtr | head -n -10 | xargs -d '\n' rm -f
$ ls -al ~/.tmux/resurrect/
total 120
drwxrwxr-x 3 admin admin 61440 Nov 22 16:35 .
drwxrwxr-x 4 admin admin 4096 Nov 5 04:02 ..
lrwxrwxrwx 1 admin admin 38 Nov 22 16:35 last -> tmux_resurrect_2015-11-22T16:35:29.txt
drwxrwxr-x 2 admin admin 4096 Nov 22 16:35 pane_contents
-rw-rw-r-- 1 admin admin 11237 Nov 22 16:35 pane_contents.tar.gz
-rw-rw-r-- 1 admin admin 692 Nov 22 02:53 tmux_resurrect_2015-11-22T02:53:49.txt
-rw-rw-r-- 1 admin admin 692 Nov 22 05:09 tmux_resurrect_2015-11-22T05:09:18.txt
-rw-rw-r-- 1 admin admin 692 Nov 22 05:24 tmux_resurrect_2015-11-22T05:24:20.txt
-rw-rw-r-- 1 admin admin 692 Nov 22 05:39 tmux_resurrect_2015-11-22T05:39:23.txt
-rw-rw-r-- 1 admin admin 795 Nov 22 05:41 tmux_resurrect_2015-11-22T05:41:37.txt
-rw-rw-r-- 1 admin admin 795 Nov 22 05:54 tmux_resurrect_2015-11-22T05:54:32.txt
-rw-rw-r-- 1 admin admin 795 Nov 22 16:05 tmux_resurrect_2015-11-22T16:05:08.txt
-rw-rw-r-- 1 admin admin 943 Nov 22 16:20 tmux_resurrect_2015-11-22T16:20:15.txt
-rw-rw-r-- 1 admin admin 795 Nov 22 16:35 tmux_resurrect_2015-11-22T16:35:29.txt
Когда я запускаю его вручную, он работает нормально, когда я проверяю, что cron принял его как задание, он работает нормально, т.е.
sudo run-parts --test /etc/cron.hourly
выход
/etc/cron.hourly/remove_old_tmux_resurrect_saves
вывод cat /etc/crontab
$ cat crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
- Что должно произойти: скрипт удаляет все файлы в этом каталоге, кроме самых последних 10
- Что происходит: ничего
У кого-нибудь есть идеи, почему это не работает?
1 ответ
cron.hourly
файл remove_old_tmux_resurrect_saves
работает как пользователь root
(следовательно, ~
относится к домашнему каталогу root
) и вы ищете файлы в домашнем каталоге пользователя admin
,
замещать ~
с абсолютным путем к домашнему каталогу пользователя admin
,
Вы также можете открыть пользователя admin
crontab запустив crontab -e
как пользователь admin
и поставить запись там.
Также обратите внимание, что разбор ls
это не очень хорошая идея, и все, что вы делаете, можно легко сделать с помощью других инструментов, и вам даже не нужен сценарий.