Создание скрипта для изменения нескольких пользователей crontabs

Я запускаю семенную коробку, подобную локальной машине, с настройкой Ubuntu 14.04LTS с многопользовательским rtorrent/rutorrent.

Я установил это через скрипт, который также установил записи crontab для каждого пользователя, чтобы rtorrent & irrsi запускались автоматически при загрузке.

Слишком высокая нагрузка (особенно в сети), если все пользователи rtorrent / irrsi работают одновременно. Итак, я начал

su - user
password
crontab -e

& затем прокомментируйте эти строки rtorrent / irrsi для пользователей AD и раскомментируйте их для пользователей EH.

Поздно вечером, когда я возвращаюсь с работы, я делаю то же самое, но раскомментирую эти строки для пользователей AD и комментирую эти строки для пользователей EH.

Все это редактирование заставило меня задуматься, не будет ли более легкого способа сделать это... Был бы способ создать скрипт, который добавляет # перед всеми строками в crontab всех пользователей? Я уточняю. И затем, возможно, второй скрипт для удаления этого # (если есть).

РЕДАКТИРОВАТЬ: crontab каждого пользователя содержит только эти 2 строки.

@reboot sleep 10; /usr/local/bin/rtcheck irssi rtorrent
*/5 * * * * /usr/local/bin/rtcheck irssi rtorrent

Когда я не хочу, чтобы они запускались при перезагрузке или позже, когда cron обнаружил, что они не работают, я просто закомментировал эти строки, чтобы они выглядели так:

#@reboot sleep 10; /usr/local/bin/rtcheck irssi rtorrent
#*/5 * * * * /usr/local/bin/rtcheck irssi rtorrent

делая это эффективно, ни irssi, ни rtorrent не запускают загрузку и не запускаются позже, когда cron обнаружит, что они не работают.

1 ответ

Вероятно, самый простой способ сделать это с cron это:

  • запускать торрент-сервис в момент времени T1 для каждого пользователя в группе пользователей A
  • остановить службу торрента в момент времени T2>T1 для пользователей в группе A
  • запускать торрент-сервис в момент времени T2>T1 для пользователей группы B
  • остановите торрент-сервис в момент времени T3>T2 для пользователей в группе B

Выберите время, например

  • T1 где-то между 0:01 и 13:59 в день Д
  • T2 это 2:00 вечера в день D
  • Т3 - 23:59 дня Д

Вы можете изменить это так, как вам нравится, чтобы распределение времени было справедливым для всех пользователей групп А и В.

Для пользователя "username" в группе A:
1) Редактировать существующий crontab записи, комментируя их. Не стирайте их, просто закомментируйте их, чтобы они не стреляли.
2) Добавить новый crontab записей:

# => either start daemon, while checking that (i) startup takes place between 0:01 am
#+ and 2:00pm and (i) no 'rtorrent' process owned by "username" already runs. 
*/10 0-14 * * * [ -z $(/bin/ps -eF | /usr/bin/awk '/rtorrent/ && /username/') ] && /sbin/start-stop-daemon -S /usr/local/bin/rtorrent  
# => or start client-app based on similar conditions
*/10 0-14 * * * [ -z $(/bin/ps -eF | /usr/bin/awk '/rtorrent/ && /username/') ] && /usr/bin/env DISPLAY=:0.0 /usr/local/bin/rtorrent  

# stop 'rtorrent' process if it exists and is owned by "username"
#+ Check every 5 minutes between 2pm and midnight
*/5 14-24 * * * /usr/bin/kill "$(/bin/ps -eF | /usr/bin/awk '/rtorrent/ && /username/ printf "%s",$2')"  > /dev/null 2>&1

Детали команды, запускающей yr daemon, будут зависеть от ряда факторов, например, запускается ли клиент rtorrent однопользовательский компьютер или несколько пользователей могут одновременно запускать свой собственный экземпляр rtorrent, В этом случае вы можете сохранить pid процесса в run-файле для каждого пользователя, чтобы вы могли управлять этими процессами в зависимости от загрузки трафика. Посмотрите на это, чтобы начать rtorrent процесс идентификации пользователя, сокета и pid.

Я не мог опробовать это решение, так что это некое набег в темноте, если говорить о правильной процедуре запуска. В частности, я предполагаю, что /home/username/.rtorrent.rc адекватно настроен, и это irssi не дает вам никаких проблем, как описано в другом месте.

НТН. Пожалуйста, сообщите.

Другие вопросы по тегам