Назад | Перейти на главную страницу

Почему я не могу запустить этот скрипт python как задание в ubuntu 12.04?

Обычно я делаю так:

cd /home/ubuntu/project/beta
python default.py -dev

Чтобы запустить сервер web.py

Я бы предпочел это:

sudo start beta

Вот мой /etc/init/beta.conf

setuid alex
setgid alex
script
  export HOME=/home/ubuntu/project
  cd $HOME/beta
  python default.py -dev
end script

Когда я делаю sudo start beta это начинается, но делает sudo status beta через несколько секунд показывает, что он остановлен. tail /var/log/syslog показывает kernel: [58023.somenumbers] init: beta main process (5460) terminated with status 134

Теперь, если я сделаю python default.py -dev а потом echo $? это показывает 0 - поэтому я не понимаю, почему возникает указанный выше код выхода. Папка beta и ее содержимое принадлежат alex: alex

Любая помощь приветствуется!

Скрипты * .conf не являются скриптами оболочки, поэтому директива интерпретатора #!/bin/sh является ТОЛЬКО нефункциональным комментарием в этом контексте.

Убедитесь, что нет системного задания с таким же названием «бета». Я предполагаю, что .conf находится в

/home/alex/.init/beta.conf

Пользовательские задания действительно не должны нуждаться в части setuid / setgid, если вам не нужно переключать GID на тот, который не является основным GID для пользователя (но находится в списке, как видно в выводе из id (1)).

Предлагаемый "cd / home / alex /" должен, согласно документации, быть "chdir / home / alex", также опуская лишнюю косую черту в конце. Это может помочь, но раздела сценария, вероятно, будет достаточно, хотя было бы неплохо увидеть вывод - возможно, сосредоточение внимания на захвате вывода с (реального) компакт-диска и сценария может помочь, с:

script
  export HOME=/home/ubuntu/project
  {
     cd $HOME/beta
     python default.py -dev
  } > $HOME/beta/log 2>&1
end script

Многие проблемы, связанные с запуском таких заданий, управляемых системой, проявляются в выходных данных id (1) или env (1), поэтому вы можете добавить эту строку прямо перед строкой python:

id ; env | sort

Личные учетные записи пользователей часто имеют измененную переменную PATH, дополнительные сценарии настройки и точечные файлы, о которых они забывают, и так далее, или полагаются на настройки среды из .bashrc и т.п., которые происходят только во время полностью интерактивного входа в систему (.bashrc vs .bash_login и kin, и так далее).

Обратите внимание, если ваша система действительно ретро /bin/sh (маловероятно), экспортная строка должна быть записана как:

HOME=/home/ubuntu/project ; export HOME

:-)

2 потенциальных проблемы

  1. В скрипте нет строки оболочки
  2. Каталог не меняется при запуске script. Так что можно script пытается записать в какое-то место, требуется разрешение root.

Попробуйте следовать

#!/bin/sh
setuid alex
setgid alex

#CD to alex home directory first so script can write output
cd /home/alex/

script
  export HOME=/home/ubuntu/project
  cd $HOME/beta
  python default.py -dev
end script