gpt4 book ai didi

linux - Shell 脚本不从 cron 作业执行

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:49:42 25 4
gpt4 key购买 nike

shell 脚本:

#!/bin/sh
services=( httpd named proftpd mysqld dovecot postfix webmin)

for service in ${services[@]}
do

if ps ax | grep -v grep | grep $service > /dev/null
then
echo "$service service running, everything is fine"
else
echo "$service is not running"
service $service start
fi

done

文件可执行,从root用户运行

命令:

bash /etc/mycron/checkServices.sh

试过 sh 和 /etc/mycron/checkServices.sh

不运行

最佳答案

#!/bin/sh
services=( httpd named proftpd mysqld dovecot postfix webmin)

for service in ${services[@]}; do
if ps ax | grep -v grep | grep $service > /dev/null; then
echo "$service service running, everything is fine";
else
echo "$service is not running";
service $service start;
fi;
done;

在这里工作正常......也许你想在 #!/bin/sh PATH="/bin:/sbin:/usr/bin:/usr/sbin: 之后添加/opt/usr/bin:/opt/usr/sbin:/usr/local/bin:/usr/local/sbin"

您还可以执行 chmod 775/etc/mycron/checkServices.sh 使其可执行,这是 cron 所必需的。然后你也不需要调用 bash/etc/mycron/checkServices.sh 并且可以调用 /etc/mycron/checkServices.sh #!/bin/sh 告诉可执行加载程序使用 /bin/sh 加载文件,如果您调用 bash/etc/mycron/checkServices.sh 您将启动 bash轮到他将启动 /bin/sh 以最终执行您的脚本。

由于 bash/sh 中的 for 循环使用 IFS 变量 ($IFS) 作为分隔符,您还可以使行 services=(httpd named proftpd mysqld dovecot postfix webmin) as services="httpd named proftpd mysqld dovecot postfix webmin" 因为这是更通用的

关于linux - Shell 脚本不从 cron 作业执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6337854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com