Кажется, моя клавиатура умерла!.
только что установил Windows как двойную загрузку, и он делает то же самое.
поэтому позвольте мне просто закрыть Q
Пример пользовательского сервиса — это самый простой способ описать, как это сделать.
Предположим, у вас есть двоичный файл или сценарий с именем mytask
, который вы хотите запустить как службу, и он находится в /usr/local/bin/
.
Создайте юнит-файл systemd
с именем my_example.service
в вашем домашнем каталоге ~/.config/systemd/user/
со следующим содержимым:
[Unit]
Description=[My example task]
[Service]
Type=simple
StandardOutput=journal
ExecStart=/usr/local/bin/mytask
[Install]
WantedBy=default.target
Строка ExecStart
является наиболее актуальной, так как именно в этой строке вы указываете путь к вашему бинарнику или скрипту, который хотите запустить.
Чтобы ваш сервис запускался автоматически при загрузке, запустите
systemctl --user enable my_example.service
Если вы хотите запустить службу немедленно, без перезагрузки, запустите
systemctl --user start my_example.service
Если вы хотите остановить службу, запустите
systemctl --user stop my_example.service
Чтобы проверить статус службы, запустите
systemctl --user status my_example.service
В Linux существует множество способов сделать процесс службой. Как упоминали другие, вы можете использовать systemd
для выполнения процесса и просмотра его вывода, но в зависимости от особенностей вашего языка вы можете использовать старый -школьный метод C 'double fork()
' (python и некоторые другие языки тоже имеют это ).
Когда вы fork()
в C, вы создаете дочерний процесс. Родительский процесс фактически будет контролировать этот дочерний процесс, но может не ждать его завершения. Если родительский процесс завершится, дочерний процесс будет в буквальном смысле осиротевшим. fork()
ing снова означает, чтоinit
(процесс 1)принимает ваш новый процесс.
В любом случае, как все это fork()
создает демона? Ну, дочерние процессы продолжают работать даже после того, как родительский завершает -, что означает, что он возвращает управление оболочке, которая его выполнила. Базовый пример fork()
приведен ниже.
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
void forkexample()
{
int ret = fork();
if (ret == 0) {
fork();
/*
* zomg i could run in here forever
* as a daemon.
* listen for input, monitor logfiles, whatever.
*/
printf("I'm the child!\n");
int x = 0;
while (x < 10) {
printf("Still running...\n");
sleep(1);
x++;
}
}
else {
printf("Child process spawned; pid %i\n", ret);
printf("I'm a parent...\n");
}
}
int main()
{
forkexample();
printf(" and I'm exiting.\n");
return 0;
}
Результат запуска будет выглядеть следующим образом :
В любом случае, продолжая :, дочерний процесс может продолжать работать вечно, как и ваша программа. Именно так я написал одну из своих первых -мировых программ,управление скоростью вращения вентилятора на моем ноутбуке.