Сценарий автоматического обновления сценария 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?

3 Solutions collect form web for “Сценарий автоматического обновления сценария Bash в cron работает неправильно?”

Автоматическое обновление из 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 .

  • FreeBSD: смешивание пакетов и портов?
  • Не удается смонтировать USB на FreeBSD: неверный аргумент
  • grep print относительный путь к файлу при выполнении рекурсивного поиска
  • Gnome 3 на FreeBSD 9
  • что такое linux boot param "memmap" эквивалент в freebsd
  • Предоставление разговора FreeBSD. Как произносится rc.conf?
  • BSD sed: заменить только N-е вхождение шаблона
  • Как добавить псевдоним IP в интерфейс VLAN в FreeBSD
  • ls показать только каталог / имя файла и размер
  • X.org отсутствующие шрифты
  • Предоставление NFS через брандмауэр FreeBSD PF
  • Linux и Unix - лучшая ОС в мире.