Linux Can upstart';s";“服务启动”;是否在cron作业中使用?
TLDR;是否可以创建运行服务的cron作业 服务名称开始?怎么做 我的工作内容Linux Can upstart';s";“服务启动”;是否在cron作业中使用?,linux,cron,upstart,Linux,Cron,Upstart,TLDR;是否可以创建运行服务的cron作业 服务名称开始?怎么做 我的工作内容 sudo crontab -e 是: 这通常作为根用户或服务器在终端上运行: service bormarise_celery_daemon start start: Job is already running: bormarise_celery_daemon 但cron给出了以下错误: bormarise_celery_daemon: unrecognized service tl;博士 您需要将/sbi
sudo crontab -e
是:
这通常作为根用户或服务器在终端上运行:
service bormarise_celery_daemon start
start: Job is already running: bormarise_celery_daemon
但cron给出了以下错误:
bormarise_celery_daemon: unrecognized service
tl;博士
您需要将/sbin
添加到cron的路径
,以便服务
脚本可以找到initctl
。为此,请在crontab顶部添加如下定义:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
如果您尝试启动的作业已在运行,则cron
向您发送电子邮件时可能仍会遇到问题,因为initctl
将以状态1(失败)退出。你可以通过以下方式解决这个问题:
45 23 * * * service bormarise_celery_daemon status | grep -q running || service bormarise_celery_daemon start
尽管有点长,但它应该仅在bormarise\u芹菜\u守护进程
未运行时才尝试运行start命令
服务vs initctl
虽然服务
命令试图管理Upstart作业,但它不是实际的Upstart控制功能,即initctl
和相关的一套快捷命令(即start
,stop
等)。所有Upstart脚本都位于/sbin/
中
service
命令试图帮助人们在Upstart和经典SysV风格的脚本之间传播服务。这样,您就可以使用一个接口(服务
脚本)来管理来自两个系统的服务
深入研究服务脚本
如果您在Ubuntu 14.04上浏览服务
脚本(它只是一个Bash脚本)的实际来源,您将看到:
if [ -r "/etc/init/${SERVICE}.conf" ] && which initctl >/dev/null \
&& initctl version | grep -q upstart
then
# Upstart configuration exists for this job and we're running on upstart
case "${ACTION}" in
start|stop|status|reload)
# Action is a valid upstart action
exec ${ACTION} ${SERVICE} ${OPTIONS}
;;
restart)
# Map restart to the usual sysvinit behavior.
stop ${SERVICE} ${OPTIONS} || :
exec start ${SERVICE} ${OPTIONS}
;;
force-reload)
# Upstart just uses reload for force-reload
exec reload ${SERVICE} ${OPTIONS}
;;
esac
fi
开幕条件:
bormarise\u芹菜\u守护进程
)是否为Upstart作业。Upstart作业进入带有.conf
扩展名的/etc/init/
服务
脚本将检查它是否可以运行initctl
服务
脚本将确保initctl
是足够新的版本服务
脚本将尝试使用适当的initctl
命令来运行Upstart作业。例如:
service bormarise_celery_daemon start
翻译成:
start bormarise_celery_daemon
这(基本上)相当于:
initctl start bormarise_celery_daemon
但是如果这些条件中的任何一个不正确,则服务
脚本假定您正在尝试运行SysV样式的脚本。这些只是位于/etc/init.d/
中的Bash脚本。但是,如果不存在这样的脚本,它将退出,并显示无法识别的服务
错误消息
拼凑
cron的默认路径仅包含/bin/
和/usr/bin/
。这意味着它不包括/sbin/
,这是initctl
可执行文件所在的位置这意味着cron
将无法运行initctl
当cron
运行您的crontab时,服务脚本能够找到您的Upstart作业,但是无法运行initctl
命令,因此它跳过了通过Upstart运行您的服务的尝试(即initctl
)。相反,它然后尝试在/etc/init.d/
中查找SysV样式的脚本。由于该脚本不存在,服务
脚本放弃并打印错误消息
如果使用包含/sbin/
的路径覆盖cron
的默认路径
,则服务
脚本将能够找到initctl
,并尝试启动Upstart作业
有趣的是,在Ubuntu12.04上,服务
脚本只检查是否存在Upstart作业,而忽略了initctl
检查。这意味着如果你在Ubuntu12.04上尝试这个,它会尝试使用Upstart来启动你的服务。但是,如果路径上没有/sbin/
,则会出现(稍微)更清晰的错误消息:
/usr/bin/service: 123: exec: start: not found
grep-q和| |非常聪明。直到。非常感谢。
/usr/bin/service: 123: exec: start: not found