Если я правильно понимаю, /var/log/paul/events.log принадлежит root; тем не менее, у вас есть скрипт, запущенный как пользователь rsyslog, который не может перемещать /var/log/paul/events.log.
sudo chown -R root.rsyslog /var/log/paul/
sudo chmod 0775 /var/log/paul
sudo chmod g+s /var/log/paul
Теперь новые файлы в / var / log / paul всегда принадлежат по rsyslog. Другим решением для использования является ACL.
Вам не нужен bash для выполнения такой задачи, и я бы предложил использовать высокоуровневый подход, чтобы не обращаться к файлам типа /etc/version и /etc/issue (у меня нет / etc / version на 13.10 ).
Итак, моя рекомендация заключается в использовании этой команды:
python -mplatform | grep -qi Ubuntu && sudo apt-get update || sudo yum update
Модуль платформы python будет работать в обеих системах, остальная часть команды проверяет, возвращается ли Ubuntu на python и запустить apt-get else yum.
Используйте Chef для этих задач.; -)
В Chef вы можете использовать метод Chef :
if platform?("redhat", "centos", "fedora")
# Code for only Red Hat Linux family systems.
end
Или:
if platform?("ubuntu")
# Code for only Ubuntu systems
end
Или:
if platform?("ubuntu")
# Do Ubuntu things
end
Или:
if platform?("freebsd", "openbsd")
# Do BSD things
end
Вот простой ответ, который я нахожу, работает во всех версиях Ubuntu / CentOS / RHEL простым присутствием файлов (конечно, без отказоустойчивости, если кто-то случайно удаляет / etc / redhat-release в ваших Ubuntu и т. д.), :
if [ -f /etc/redhat-release ]; then
yum update
fi
if [ -f /etc/lsb-release ]; then
apt-get update
fi
apt-get -v &> /dev/null && apt-get update
which yum &> /dev/null && yum update
, если есть только два дистрибутива, вы можете сделать это короче:
apt-get -v &> /dev/null && apt-get update || yum update
каким-то образом yum -v возвращать ненулевое значение в CentOS, поэтому используйте which вместо этого, конечно, вы следует рассмотреть сценарий, если нет which.
Следующий скрипт должен указать, является ли это Ubuntu. Если это не так, и единственное, что у вас есть, это CentOS, вы должны иметь это в предложении else:
dist=`grep DISTRIB_ID /etc/*-release | awk -F '=' '{print $2}'`
if [ "$dist" == "Ubuntu" ]; then
echo "ubuntu"
else
echo "not ubuntu"
fi
Проверьте Ubuntu в имени ядра:
if [ -n "$(uname -a | grep Ubuntu)" ]; then
sudo apt-get update && sudo apt-get upgrade
else
yum update
fi
Выполнить /etc/os-release в поднаборе и отобразить его значение:
if [ "$(. /etc/os-release; echo $NAME)" = "Ubuntu" ]; then
apt-get install updates
else
yum update
fi
Я бы использовал python
if ! python -c "exec(\"import platform\nexit ('centos' not in platform.linux_distribution()[0].lower())\")" ; then
echo "It is not CentOS distribution, ignoring CentOS setup"
exit 0
fi
Использование этой команды работает в CentOS, Ubuntu и Debian: grep "^NAME=" /etc/os-release |cut -d "=" -f 2 | sed -e 's/^"//' -e 's/"$//'
В Debian он дает Debian GNU/Linux, в Ubuntu он дает Ubuntu, а в CentOS он дает CentOS Linux.
Преимущество использования grep, cut и sed вместо gawk ясно: у Debian по умолчанию нет gawk, поэтому вы не можете полагаться на него на случайном поле Debian.