Каков наиболее удобный способ настроить запуск команды crontab каждые 59 секунд, кроме запуска sleep 59
в начале моего сценария?
Если других предложений нет, будет выполняться sleep 59
отложить все мои другие записи cron, запланированные для выполнения, дождаться завершения спящего?
Обновить Зачем мне это вообще нужно? Я написал небольшой скрипт, чтобы узнать, кто заходил в систему в последнюю минуту, он выглядит так:
who | grep `date +%R` | awk '{ print $1 " joins us." }' | write $USER
Чтобы он работал и не усложнял дело, мне нужно, чтобы он запустился в конце минуты.
Это имеет date
команда, которая смотрит на предыдущую минуту:
who | grep `date -d "now -1 min" +%R` | awk '{ print $1 " joins us." }' | write $USER
Тогда вы можете запустить его в минуту с помощью cron
:
* * * * * /some/dir/scriptname
Вы даже можете сделать это:
who | grep `date -d "now -60 sec" +%R` | awk '{ print $1 " joins us." }' | write $USER
редактировать: Вот халява:
awk 'FNR > 2 {printf ",\n"} {printf "%s", name; name = $0; next} END {conj = " and\n"; if (FNR == 1) {singular = "s"; conj = ""}; printf "%s%s join%s us\n", conj, name, singular}'
Вывод с запятыми, «и» и согласование глаголов во множественном числе и удаление повторяющейся фразы (вы можете заменить новые строки (кроме последней) пробелами, если хотите, чтобы все это было в одной строке):
Аллен присоединяется к нам
или
счет и
Крис присоединяйся к нам
или
Дэйв,
Эллен и
Фелисити, присоединяйся к нам
Лучшее, что вы можете сделать с помощью cron, - это запускать его каждую минуту:
# minute hour dom mon dow
* * * * * /path/to/command
sleep 59
не будет откладывать другие задачи.
Но пахнет опасностью. если ты необходимость этот уровень детализации, то я предсказываю, что вы не застрянете.
Если вы объясните причину своих требований, вы можете обнаружить, что кто-то может предложить лучшее лекарство.
cron просто не так точен. Если вам нужен такой уровень точности, вам следует подумать о написании демона.
Рассматривали ли вы использование tail -f в auth.log и просто постоянное наблюдение за логинами?
Лучше добавить сценарий ко всем пользователям файла .login, или .bashrc, или аналогичного.
1) Он запускался только тогда, когда кто-то входил в систему, поэтому более эффективно. 2) он будет работать мгновенно, когда кто-то войдет в систему, поэтому без задержек.
Я просто упомяну это zsh имеет watch
встроенный это делает именно это. (Хотя, чтобы увидеть это, вы должны использовать zsh и свою оболочку: в других терминалах он не появится.)
Короче, добавьте это в свой .zshrc
:
watch=notme