我有一个非常小的 upstart 作业,用于在/etc/init/tsm.conf
网络启动后启动备份客户端。如果我通过 手动启动/停止它,它就可以正常工作。service tsm start|stop|status
但是service tsm enable
显示tsm: unrecognized service
。因此它不会在启动时自动启动。sudo service --status-all
也不会在已知作业列表中显示它。
这里是:
start on started networking
stop on stopped networking
respawn
script
#!/bin/bash
dsmc schedule > /dev/null
end script
我运行的是 ubuntu 12.04.4。Upstart 版本是 1.5-0ubuntu7.2。有人能帮我吗?:)
更新
使用initctl list
和其他 initctl 命令显示我的工作。
答案1
根据我的经验,您不必“启用”任何东西,只需将 .conf 放入 /etc/init 即可享受。
您可以通过在脚本中添加如下行来验证该脚本是否运行:
echo "alive" > /alive_and_well
如果脚本运行,这将在你的根目录中创建文件“alive_and_well”。
如果没有,问题很可能出在“start on”一节中。以下是我用于此类事情的方法(已知有效):
start on (local-filesystems and net-device-up IFACE!=lo)
stop on runlevel [!2345]
此外,Upstart 脚本中的 shebang 不受支持,因此“#!/bin/bash”毫无用处(据我所知)。
答案2
查看 中列出的其他 upstart 作业/etc/init.d/
。在我的系统上,它们都是 的符号链接/lib/init/upstart-job
,这使得service
命令有效(我正在运行 Saucy)。
如果您希望该service
命令起作用,请尝试创建相同的符号链接。
否则,直接使用start
、stop
和restart
。
答案3
听起来服务正在运行,但您没有看到预期的行为。如果它需要以特定用户身份运行或设置环境变量,则可能需要指定这些变量。确保 dsmc 命令在您的 PATH 中,或更改为它所在的目录。
摘自《Upstart Cookbook》:http://upstart.ubuntu.com/cookbook/
环境变量:Upstart 允许您设置环境变量,这些变量可供定义它们的作业配置文件中的作业访问。使用 env 关键字设置环境变量。
env ENV_VAR=value
设置组 ID:在运行作业进程之前更改组。
setgid <groupname>
设置用户 ID:在运行作业流程之前更改用户。
setuid <username>
更改目录:使用指定目录中的工作目录而不是文件系统的根目录运行作业的进程。
chdir <directory>