Изменение пользователя в скрипте?

Я пытаюсь изменить пользователя, чтобы выполнить определенную команду во время запуска. Он терпит неудачу, и, видимо, пользовательский обмен не выполняется, поскольку я могу сказать, что команда не выполнена.

Что я делаю неправильно в моем ниже показанном initscript?

respawn console none start on startup stop on shutdown script su -u anotheruser -c "myCommand" >> "myLogfile.log" end script 

Я предполагаю, что вы используете последнюю версию ubuntu или дистрибутив, основанный на выскочке . Вы можете проверить /var/log/daemon.log наличие ошибок.

Стандартный su принимает синтаксис su [options] [username] . Заказчик man 1 su . Вы можете попробовать:

 su -c "myCommand" anotheruser >> "myLogfile.log" 

Кроме того, произошло несколько вещей (в основном нежелательных)

  1. myLogfile.log будет принадлежать root .
  2. myLogfile.log будет создан в / (корневой каталог), если вы не используете абсолютный путь, например, /tmp/myLogfile.log (потому что upstart работает с pwd, установленным в / ).

Если вы хотите, чтобы файл принадлежал anotheruser вы можете переключить эту команду.

 su -c "myCommand >> /tmp/myLogfile.log" anotheruser 

Это может вызвать проблемы, если у вас myLogfile.log принадлежащий root из более ранних запусков, или если вы не изменили myLogfile.log на что-то вроде /tmp/myLogfile.log (обычно обычные пользователи не могут создавать файлы в корневом каталоге dir / ).

Похоже, вы перепутали синтаксис su и sudo .

 su -c 'mycommand' anotheruser sudo -u anotheruser 'mycommand'