Intereting Posts
Показать строки состояния vim и tmux на одной строке Добавить модуль драйвера во встроенный Linux Практическое использование для перемещения файловых дескрипторов Как я могу переместить каталог (и все вложенные файлы / каталоги), но переместить элементы в алфавитном порядке? Как перейти на другой диск или раздел? awk: напечатать одну строку на поле-1 значение (отличное), где разница «поле-2 – поле-3» минимально Почему эта команда gs не работает на –filename.pdf? 2 Аутентификация фактора в SSH с использованием открытого ключа и PAM как grep определенная строка в случайном столбце предоставить разрешение в Linux Почему «head / bin / ls» сбрасывает терминал Дисплей часто показывает черный экран Что является самым безопасным и простым способом ввода пароля пользователя в bash стать частью stdin для программы? Как суммировать время в текстовом файле с помощью командной строки? Как предотвратить открытие всплывающих окон «Невозможно открыть устройство MTP»?

Сценарий автоматического обновления сценария Bash в cron работает неправильно?

Недавно я попытался написать сценарий для автоматизации проверки новой версии портов и программного обеспечения, установленных на моем сервере FreeBSD. Этот скрипт добавляется в root crontab и каждый день запускается. Если я запустил его из sudo / path / to / script, он отправляется вперед, отправляя почту с контентом на мой адрес электронной почты. Если он управляется cron, я получаю пустое письмо. Я думаю, что причина может заключаться в том, что при обновлении иногда появляется окно (из make config i think) с параметрами компиляции, но я могу ошибаться. Вот сценарий:

 #!/usr/local/bin/bash # DIRECTORIES SETUP script_path_dir="/tmp" working_dir="$script_path_dir/portsupgradescript" # FILES SETUP mail_file="$working_dir/mail.txt" mail_address="MY_MAIL_ADDRESS" mail_subject="Daily update" pm_out="portmaster_log.txt" pu_out="portupgrade_log.txt" # START if [ ! -d "$script_path_dir" ]; then echo "Script base directory set does not exist. Creating..." mkdir $script_path_dir else echo "Script base directory set exists. OK" fi if [ ! -d "$working_dir" ]; then echo "Script working directory set does not exist. Creating..." mkdir $working_dir else echo "Script working directory set exists. OK" fi if [ "$(ls -A $working_dir)" ]; then echo "Script working directory is empty. OK" else echo "Script working directory is not empty. Cleaning..." rm -rf $working_dir/* fi rm -rf $pm_out rm -rf $pu_out rm -rf $mail_file /usr/sbin/portsnap fetch update && \ /usr/local/sbin/portmaster -L --index-only | egrep '(ew|ort) version|total install' > $pm_out linecount=`wc -l $pm_out | awk {'print $1'}` if [ "$linecount" != "0" ] then echo "Master file log not empty. Concatenating..." cat $pm_out >> $mail_file else echo "Master file log empty... ( x ) " fi portupgrade -aqyP -l $pu_out upg_linecount=`wc -l $pu_out` if [ "$upg_linecount" != "0" ] then echo "Upgrade file log not empty. Concatenating..." cat $pu_out >> $mail_file else echo "Upgrade file log empty... ( x ) " fi echo "Seding mail report..." cat $mail_file | mail -s "$mail_subject" "$mail_address" 

Есть ли способ выбрать значения по умолчанию в окне « make config », чтобы это не было showstopper? Или, может быть, я должен запустить этот скрипт в пользовательском cron, а не в root?

Автоматическое обновление из cron – это плохая идея. Вы действительно должны читать / usr / ports / UPDATING, если есть какие-то ручные действия, которые необходимо предпринять. Я уверен, что это, вероятно, не будет очень популярным, извините, но это правда. Существует причина, по которой существует ОБНОВЛЕНИЕ.

Что касается вашего скрипта, вы можете определить BATCH = yes в файле /etc/make.conf, и вам не будет предложено указать конфигурацию. Вы можете также, но это не значит, что ваши обновления будут хорошо.

Если вы используете portsnap из cron, вы должны действительно использовать действие cron вместо fetch . Он спит для случайного промежутка времени между 1 секундой и часом, прежде чем подключиться к серверу. Это предназначено для снижения вероятности того, что большое количество клиентов одновременно выйдет в интернет и забивает серверы.

portupgrade имеет опцию --batch , которая предназначена для обработки всех портов полностью автоматическим способом, поэтому должна принимать значения по умолчанию или результаты предыдущего вызова make config . Это может быть то, что вы ищете.

Я видел значения по умолчанию, выбранные в make config как:

 yes '' | make config 

yes петли навсегда распечатывают все свои аргументы, разделенные пробелом, и следуют за ними с помощью \ n. Если аргументы не заданы, он печатает «y», а затем новую строку на каждой итерации. Здесь мы дали ему пустой аргумент, чтобы заставить его просто печатать строки новой строки, которые, как и нажатие, вводятся, чтобы принимать все значения по умолчанию из подсказок из make config .