3

I have a very small upstart job in /etc/init/tsm.conf to start backup client after network starts. It works just ok if I start/stop it manually via service tsm start|stop|status. But service tsm enable says tsm: unrecognized service. So it doesn't start on boot automatically. sudo service --status-all also doesn't show it in the list of known jobs.

Here it is:

start on started networking
stop on stopped networking

respawn

script
#!/bin/bash
dsmc schedule > /dev/null
end script

I run ubuntu 12.04.4. Upstart version is 1.5-0ubuntu7.2. Could anybody help me? :)

UPDATE

Using initctl list and other initctl commands shows my job.

Alexander
  • 173

3 Answers3

3

As of my experience you don't have to "enable" anything, just put the .conf in /etc/init and enjoy.

You can verify that the script does run by adding a line like this in the script:

echo "alive" > /alive_and_well

This will create file "alive_and_well" in your root dir if the script runs.

If it doesn't, the problem is most likely in the "start on" stanza. Here's what I use for such things (known to work):

start on (local-filesystems and net-device-up IFACE!=lo)
stop on runlevel [!2345]

Also shebangs in Upstart scripts are not supported, so "#!/bin/bash" is useless (AFAIK).

Shnatsel
  • 1,188
  • 1
    Thanks! The problem was in start on. I've taken one from mysql.conf with explicit runlevel instead of networking and it works. – Alexander Jan 24 '14 at 10:17
0

Take a look at the other upstart jobs listed in /etc/init.d/. On my system, they are all symlinks to /lib/init/upstart-job, which makes the service command work (I'm running Saucy).

Try creating the same symlink if you want the service command to work.

Otherwise, use start, stop and restart directly.

Robie Basak
  • 15,670
  • /etc/init.d/ is for sysvinit compatibility, the actual jobs reside in /etc/init/ – Shnatsel Jan 24 '14 at 10:02
  • Indeed; and the service command that the question used requires this sysvinit compatibility to be in place for the job he created. If you care to look, you'll find that all other system-provided upstart jobs have one. – Robie Basak Jan 24 '14 at 10:40
0

It sounds like the service is running but you're not seeing the behavior you expect from it. If it needs to run as a certain user or with environment variables set then you may need to specify those. Make sure the dsmc command is in your PATH, or change to the directory where it resides.

From the Upstart Cookbook: http://upstart.ubuntu.com/cookbook/

Environment variables: Upstart allows you to set environment variables which will be accessible to the jobs whose job configuration files they are defined in. Environment variables are set using the env keyword.

env ENV_VAR=value

Set Group Id: Changes to the group before running the job's process.

setgid <groupname>

Set User Id: Changes to the user before running the job's process.

setuid <username>

Change directory: Runs the job's processes with a working directory in the specified directory instead of the root of the filesystem.

chdir <directory>
thinkmassive
  • 783
  • 5
  • 9