Linux Shell脚本没有';无法从cron作业执行
shell脚本:Linux Shell脚本没有';无法从cron作业执行,linux,shell,cron,jobs,Linux,Shell,Cron,Jobs,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
#!/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
文件可执行文件,从根用户运行
命令:
bash /etc/mycron/checkServices.sh
尝试了sh和just/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告诉可执行加载程序,如果调用bash/etc/mycron/checkServices.sh,将使用/bin/sh
加载文件。sh
将启动bash,然后由他启动/bin/sh
,最终执行脚本
由于bash/sh中的for循环使用IFS变量($IFS
)作为分隔符,您还可以将行services=(httpd named proftpd mysqld dovecot postfix-webmin)
设置为services=“httpd named proftpd mysqld dovecot postfix-webmin”
,因为这更一般
在这里工作很好。。。也许您想在之后添加/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告诉可执行加载程序,如果调用bash/etc/mycron/checkServices.sh,将使用/bin/sh
加载文件。sh
将启动bash,然后由他启动/bin/sh
,最终执行脚本
由于bash/sh中的for循环使用IFS变量(
$IFS
)作为分隔符,您还可以将行services=(httpd named proftpd mysqld dovecot postfix webmin)
设置为services=“httpd named proftpd mysqld dovecot postfix webmin”
,因为这是一个更一般的诊断过程,在脚本中插入跟踪语句是明智的,例如:
- 回声“开始…”
- echo“正在检查正在运行的服务“$service…”
- 服务在哪里
- “echo”服务已启动
- 暂时删除
的ps
/dev/null
这使您能够识别出故障的确切线路。正如其他人所说,可能是因为路径未设置为包含“service”或“$service”命令,所以找不到它们。您是否意识到“服务”本身被视为一个外部命令,可能会依次启动$service?还要注意root的邮件,因为cron有时会通过邮件发送错误报告。作为一般诊断过程,在脚本中插入跟踪语句是明智的,例如:
- 回声“开始…”
- echo“正在检查正在运行的服务“$service…”
- 服务在哪里
- “echo”服务已启动
- 暂时删除
的ps
/dev/null
这使您能够识别出故障的确切线路。正如其他人所说,可能是因为路径未设置为包含“service”或“$service”命令,所以找不到它们。您是否意识到“服务”本身被视为一个外部命令,可能会依次启动$service?还要注意root的邮件,因为cron有时会通过邮件发送错误报告。您是否为cron作业设置了时间表?发布完整的crontab命令,制作第二行“printenv>/tmp/crontest”,并告诉我们文件的UID和路径。@Seth是正确的。cron作业在非常有限的环境中运行。“service”命令可能位于/sbin或其他位置。是否为cron作业设置了时间表?发布完整的crontab命令,制作第二行“printenv>/tmp/crontest”,并告诉我们文件的UID和路径。@Seth是正确的。cron作业在非常有限的环境中运行。“service”命令可能位于/sbin或其他位置。@lesyk回应您的编辑建议:请在此处发表评论,并多说“不起作用”。@lesyk回应您的编辑建议:请在此处发表评论,并多说“不起作用”。