Создание скрипта для изменения нескольких пользователей 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
не дает вам никаких проблем, как описано в другом месте.
НТН. Пожалуйста, сообщите.