我正在尝试编写一个cronjob,通过运行以下命令来定期更新给定yum存储库中的软件包:
yum -q -e 0 -d 0 -y update --disablerepo='*' --enablerepo='my-yum-repo'
为了防止出现类似以下的“ yum lock警告” ...
Existing lock /var/run/yum.pid: another copy is running as pid 4902.
Another app is currently holding the yum lock; waiting for it to exit...
The other application is: yum
Memory : 42 M RSS (325 MB VSZ)
Started: Wed Apr 3 01:10:07 2019 - 00:01 ago
State : Running, pid: 4902
...我试图将我的代码封装在while循环中,以检查yum.pid文件是否存在,如下所示:
*/5 * * * * root while [ -f /var/run/yum.pid ]; do sleep 1; done && yum -q -e 0 -d 0 -y update --disablerepo='*' --enablerepo='my-yum-repo'
不幸的是,有时仍会出现“ yum lock警告”。
我也这样尝试过,并且仍然会不时出现“ yum lock警告”:
while [ `pgrep 'yum|rhn_check'` ]; do sleep 1; done && yum -q -e 0 -d 0 -y update --disablerepo='*' --enablerepo='my-yum-repo'
您是否知道如何防止它们发生?我想避免将stdout重定向到/ dev / null,因为如果在软件包更新期间发生“实际”问题,则需要通知我。
在此先感谢您的帮助!
答案 0 :(得分:0)
您可以检查进程列表是否正在运行yum,并在退出进程完成后继续操作。
numProcess=` ps -ef | grep 'yum' | grep -v 'grep' | wc`
while [[ numProcess -gt 0 ]]
do
sleep 5;
done
yum -q -e 0 -d 0 -y update --disablerepo='*' --enablerepo='my-yum-repo'