Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Can upstart';s";“服务启动”;是否在cron作业中使用?_Linux_Cron_Upstart - Fatal编程技术网

Linux Can upstart';s";“服务启动”;是否在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

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;博士 您需要将
/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