Попробовать xmonad --recompile
.
В то время как я не могу ответить, почему это автоматически не перекомпилировало если .xmonad/xmonad.hs
изменяется (я думаю, что это должно и однажды сделало), это могло бы помочь, особенно с нахождением ошибок в конфигурации, не перезапуская сессию.
Для создания задания, которое будет запущено автоматически, когда Ubuntu запустится, используйте пример, данный здесь. Как записанный пример, предположите для создания следующего файла /etc/init/testservice.conf
с sudo:
# testservice - test service job file
description "my service description"
author "Me <myself@i.com>"
# Stanzas
#
# Stanzas control when and how a process is started and stopped
# See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas
# When to start the service
start on runlevel [2345]
# When to stop the service
stop on runlevel [016]
# Automatically restart process if crashed
respawn
# Essentially lets upstart know the process will detach itself to the background
# This option does not seem to be of great importance, so it does not need to be set.
#expect fork
# Specify working directory
chdir /home/user/testcode
# Specify the process/command to start, e.g.
exec python mycommand.py arg1 arg2
'Вручную' запустить или остановить использование процесса
sudo start testservice
sudo stop testservice
Посмотрите команды управления заданиями.
Хорошо, Alex, дело в том, что все процессы пространства пользователя в Linux запускаются с init
процесс, pid которого равняется 1. Например, выполненный pstree
видеть дерево Ваших процессов, корень которых является init.. Существует несколько версий init
внедрение процессов в наше время, самый известный
Традиционно, Unix'es использовал init названную реализацию sysVinit
init, названный под названием https://ru.wikipedia.org/wiki/UNIX_System_V версия Unix. Это очень влияет, и другие inits обратно совместимы к нему.
В основном, sysVinit сначала читает /etc/inittab
файл, решает, какой runlevel работать и говорит /etc/init.d/rc
сценарий для выполнения так называемых init сценариев. Например, когда это обычно загружается к многопользовательскому runlevel, который обычно является runlevel 2 на Ubuntu, /etc/init.d/rc
начинает выполнять сценарии в /etc/rc2.d
. Файлы там являются только символьными ссылками на сценарии, в то время как сами сценарии хранятся в /etc/init.d
каталог. Именование тех символьных ссылок в /etc/rc*.d
каталоги следующие. Скажите, у нас есть следующие сценарии в /etc/rc2.d
:
$ls /etc/rc2.d
S16rsyslog
S17apache2
K02network-manager
Это означает, которые после переключения на runlevel 2 init обрабатывают, сначала уничтожает network-manager
процессы, причина его название сценария запускается с K
- K02network-manager
и затем запускает процессы, имена которых запускаются с S
. Эти две цифры после S
или K
число от 00 до 99, который определяет порядок, процессы запускаются в. Например. rsyslog
запускается прежде apache2
, потому что 16 меньше чем 17 (который имеет смысл, причина, Вы хотите, чтобы апач положился на регистрирующиеся мощности rsyslog, таким образом rsyslog, должна быть запущена сначала). Сценарии являются случайными сценариями оболочки, выполняемыми #!/bin/sh
.
Так, в основном для запуска программы после запуска в стиле sysVinit запишите собственный сценарий (вставка копии это от любого примера, Вы вошли /etc/init.d
), поместите его в /etc/init.d
и создайте символьную ссылку на него под разумным именем, например. S99mytrojan
в /etc/rc2.d
. Вот объяснение типичных sysVinit сценариев в/etc/init.d http://docs.oracle.com/cd/E19683-01/806-4073/6jd67r96g/index.html
Теперь, парни Ubuntu решили, что хотят дополнительную функциональность от init. Они хотели быструю начальную загрузку ОС, таким образом, они хотели, чтобы их сценарии были выполнены параллельно; они хотели, чтобы мертвые процессы были автоматически перезапущены; они хотели, чтобы процессы вызвали друг друга явным способом событиями (так, чтобы апач был выполнен "системным журналом, запущенным" событие, и системный журнал выполняется "файловыми системами, смонтированными" событие и т.д., таким образом, у нас есть события вместо некоторых номеров 00-99). Таким образом они сделали Выскочку, и вот то, как это работает. Выскочка initscripts вставляется /etc/init
каталог (не путают с /etc/init.d
). Выскочка обычно работает /etc/init.d/rc
также, таким образом, это собирается выполнять Ваши sysVinit сценарии обычно. Но если Вы хотите, чтобы Ваш сценарий был повторно порожден на выход - события Upstart для Вас.
Хотя я не могу проверить, что мой сценарий работает, я предполагаю, что для Ваших целей, необходимо записать следующее /etc/init/mytrojan.conf
сценарий:
start on runlevel [02]
respawn
exec mytrojan --argument X
Но если Вам нужны зависимости, по крайней мере, файловые системы и сеть, может быть это, имеет смысл заменять start on runlevel [02]
с чем-то как:
start on (local-filesystems and net-device-up IFACE!=lo)
ПРЕДУПРЕЖДЕНИЕ: Я не проверил правильность этого, вызвал, я не могу. Особенно, я не совсем уверен в том, как запустить сценарий после того, как Ваше сетевое соединение в порядке (я использовал эту версию). Попытайтесь гуглить для "выскочки в сети".