Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Очистка корзины Cron'ом  (Прочитано 1894 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн leszhek

  • Автор темы
  • Новичок
  • *
  • Сообщений: 44
    • Просмотр профиля
Очистка корзины Cron'ом
« : 11 Сентября 2016, 12:36:45 »
Добрый день.

Озадачился чистить корзину по расписанию. Самым простым решением показалось использование

gvfs-trash --empty
Попробовал, работает. Прописал это в Cron (локальный пользовательский). Строка выглядит так:

00 11 * * 7 /usr/bin/gvfs-trash --empty
Не сработало (в смысле, задание отработало, но корзина не очистилась, по почте тоже ничего не пришло):

Sep 11 11:00:01 comp CRON[9919]: (user) CMD (/usr/bin/gvfs-trash --empty)
сделал из этой строки исполняемый скрипт

#!/bin/sh
/usr/bin/gvfs-trash --empty

Попробовал запустить напрямую - корзина чистится, запустил через Cron

10 11 * * * /home/user/CTrash.sh
Ответ Cron'а ровно тот же (вроде выполнено, но корзина не очищена)

Sep 11 11:10:01 COMP CRON[10005]: (user) CMD (/home/user/CTrash.sh)

Чувствую, что чего-то я не договариваю системе (может она не мою корзину чистит =))

Подскажите кто знает, чего я не так делаю.


ТС не появлялся на Форуме более полугода по состоянию на 14/07/2019 (последняя явка: 23/09/2018). Модератором раздела принято решение закрыть тему.
--zg_nico
« Последнее редактирование: 14 Июля 2019, 01:55:32 от zg_nico »

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: Очистка корзины Cron'ом
« Ответ #1 : 12 Сентября 2016, 00:37:22 »
Цитировать
вроде выполнено, но корзина не очищена
Смотри вывод и код завершения в логе:
#!/bin/sh
LOG='/home/user/Cron_gvfs_trash.log'
/usr/bin/gvfs-trash --empty &>"$LOG"
echo $? >> "$LOG"

Цитировать
может она не мою корзину чистит =))
Конечно не твою - потому что все выполняется от рута.
Сравни окружение скрипта при ручном запуске, и кроном:
#!/bin/sh
set > /home/user/Script_env.txt

Чтобы выполнялось от юзера:
su $(who | sed -rn 's/^([^ ]+) :0.*/\1/p') -c '/usr/bin/gvfs-trash --empty'

Оффлайн leszhek

  • Автор темы
  • Новичок
  • *
  • Сообщений: 44
    • Просмотр профиля
Re: Очистка корзины Cron'ом
« Ответ #2 : 12 Сентября 2016, 12:16:50 »
Завершается с кодом 0 и в ручную и в Cron.

Окружение пользователя, вроде похоже на мое (это из выполненя CRON):

HOME='/home/user'
IFS='
'
LANG='ru_RU.UTF-8'
LOG='/home/user/Cron_gvfs_trash.log'
LOGNAME='user'
OPTIND='1'
PATH='/usr/bin:/bin'
PPID='2804'
PS1='$ '
PS2='> '
PS4='+ '
PWD='/home/user'
SHELL='/bin/sh'

Единственное, что смущает, оно не полное (если выполнять локально, то переменных больше)

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: Очистка корзины Cron'ом
« Ответ #3 : 12 Сентября 2016, 14:12:06 »
PATH неполный, добавь (в начало скрипта) такой:
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binЕще определить дисплей:
export DISPLAY=':0' и сама команда:
su $(who | sed -rn 's/^([^ ]+) :0.*/\1/p') -c '/usr/bin/gvfs-trash --empty'

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Очистка корзины Cron'ом
« Ответ #4 : 12 Сентября 2016, 15:27:58 »
who | sed -rn 's/^([^ ]+) :0.*/\1/p'
Серьёзно? :o $USER, не?
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: Очистка корзины Cron'ом
« Ответ #5 : 12 Сентября 2016, 15:53:18 »
Серьезно. Это способ чтобы не вписывать имя какого-то юзера, а само определялось.
Цитировать
$USER, не?
Да если $USER определена в окружении, нужный юзер, и не рут.

Оффлайн leszhek

  • Автор темы
  • Новичок
  • *
  • Сообщений: 44
    • Просмотр профиля
Re: Очистка корзины Cron'ом
« Ответ #6 : 12 Сентября 2016, 21:31:39 »
А это выражение точно правильное?

who | sed -rn 's/^([^ ]+) :0.*/\1/p'

потомучто, если его ввести в командную строку, то никакого вывода нет =(

Даже если сделать так:

who | sed -rn 's/^([^ ]+) :0.*/\1/p' >test.log
В файле пусто

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: Очистка корзины Cron'ом
« Ответ #7 : 12 Сентября 2016, 21:33:48 »
leszhek,
У меня работает. Покажи вывод who

Оффлайн leszhek

  • Автор темы
  • Новичок
  • *
  • Сообщений: 44
    • Просмотр профиля
Re: Очистка корзины Cron'ом
« Ответ #8 : 12 Сентября 2016, 21:50:59 »
leszhek,
У меня работает. Покажи вывод who

user     :0           2016-09-12 19:49 (:0)
user     pts/6        2016-09-12 19:50 (:0)

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: Очистка корзины Cron'ом
« Ответ #9 : 12 Сентября 2016, 22:02:11 »
who | sed -rn 's/^([^ ]+)\s+:0.*/\1/p'

Оффлайн leszhek

  • Автор темы
  • Новичок
  • *
  • Сообщений: 44
    • Просмотр профиля
Re: Очистка корзины Cron'ом
« Ответ #10 : 12 Сентября 2016, 22:07:35 »
who | sed -rn 's/^([^ ]+)\s+:0.*/\1/p'

Да, так сработало, в вывод попало имя пользователя

Можешь пояснить разницу?
(\s вместо пробела, и почему у тебя сработало с пробелом, а у меня нет?)

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: Очистка корзины Cron'ом
« Ответ #11 : 12 Сентября 2016, 22:10:55 »
У меня выводит с одним пробелом, у тебя с несколькими.
\s - пробельный символ, пробел или табуляция.

Оффлайн leszhek

  • Автор темы
  • Новичок
  • *
  • Сообщений: 44
    • Просмотр профиля
Re: Очистка корзины Cron'ом
« Ответ #12 : 12 Сентября 2016, 22:15:58 »
Скрипт в Cron не сработал.

Прислал вот это по почте:

From user@COMP  Mon Sep 12 22:10:01 2016
Return-Path: <user@COMP>
X-Original-To: user
Delivered-To: user@COMP
Received: by user (Postfix, from userid 1000)
id E9A5F300395; Mon, 12 Sep 2016 22:10:01 +0300 (MSK)
From: root@COMP (Cron Daemon)
To: user@COMP
Subject: Cron <user@COMP> /home/user/CTrash.sh
Content-Type: text/plain; charset=ANSI_X3.4-1968
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/user>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=user>
Message-Id: <20160912191001.E6A4F300395@DCS-01>
Date: Mon, 12 Sep 2016 22:10:01 +0300 (MSK)

su: должен запускаться из терминала

При запуске вручную просто запросил пароль =(

У меня выводит с одним пробелом, у тебя с несколькими.
\s - пробельный символ, пробел или табуляция.

Спасибо

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: Очистка корзины Cron'ом
« Ответ #13 : 13 Сентября 2016, 00:25:35 »
Запуск через su - это только если от рута.
Попробуй такой скрипт:
#!/bin/bash
export DISPLAY=':0'
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
gvfs-trash --empty

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Очистка корзины Cron'ом
« Ответ #14 : 13 Сентября 2016, 09:31:09 »
Да если $USER определена в окружении, нужный юзер, и не рут.
Если рут, то он и в выводе who будет. А так $USER как и $HOME — системные переменные, определяются(устанавливаются) при логине определенного пользователя.
Но не суть. Суть в том, что парсить вывод команды who — «дурной тон», когда есть другие методы/команды получить искомое (кроме вышеупомянутого например, whoami == id -un).
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

 

Страница сгенерирована за 0.028 секунд. Запросов: 23.