我从源代码编译Nginx,现在我想通过systemd来pipe理它,比如systemctl start,stop,restart,reload,enable nginx.service 。 我需要做什么来启用这个?
我有一个configurationsystemctl的服务。 这是configuration文件: [Unit] Description=eureka-server After=syslog.target [Service] User=bhushanp #User=root ExecStart=/usr/bin/java -jar /home/bhushanp/apps/eureka_server.jar > /var/log/es.log 2>>&1 SuccessExitStatus=143 [Install] WantedBy=multi-user.target 但是不把日志写入/var/log/es.log文件。 任何帮助表示赞赏。
在Debian 8上,我部署了一个由几个小应用程序组成的应用程序,其中一个小应用程序使用HDF5文件。 HDF5文件的问题是你必须closures它们。 例如,如果你编程的程序片断或你的程序被杀死, HDF5文件被损坏。 根据HDF5文件的大小,closures它可能需要几秒钟的时间。 我有一个工具mondas_ctrl这是我的应用程序的pipe理器,他们的结构在这里并不重要。 login(通过SSH)我可以执行mondas_ctrl start或mondas_ctrl stop没有问题,特别是停止命令知道如何处理HDF5文件(通过添加延迟之间)。 使用旧的SysV,我可以通过改变/etc/inittab上的运行级别6来延迟暂停进程,这是一个自写的脚本,它在执行init 0之前负责照顾HDF5文件。 现在systemd是默认的,我不得不改变我对init.d文件和服务的看法。 所以我写了一个使用我的经理来启动和停止我的应用程序的用户服务: 文件: ~/.config/systemd/user/mondas.service [Unit] Description=Mondas [Service] Type=oneshot RemainAfterExit=yes ExecStart=/home/mondas/anaconda/default/bin/mondas_ctrl start ExecRestart=/home/mondas/anaconda/default/bin/mondas_ctrl restart ExecStop=/home/mondas/anaconda/default/bin/mondas_ctrl stop KillMode=none [Install] WantedBy=default.target 起初我对停止命令有点麻烦。 读完这个线程后,我添加了Type , RemainAfterExit和KillMode选项。 这些帮助了很多,现在我可以做到这一点: $ systemctl –user start mondas $ systemctl –user stop mondas $ systemctl –user start mondas 尽可能多的停止命令不会杀死任何东西,我的mondas_ctrlpipe理器停止HDF5应用程序,该文件被closures,并没有被损坏。 但是当我做一个系统范围的重新启动(无论是通过执行reboot或shutdown -r now ), […]
这个“服务”似乎运行/ bin / true,但为什么? 还有另一个postgresql @ .service文件,但是为什么这个文件存在呢? 是的,这是整个文件。 # systemd service for managing all PostgreSQL clusters on the system. This # service is actually a systemd target, but we are using a service since # targets cannot be reloaded. [Unit] Description=PostgreSQL RDBMS [Service] Type=oneshot ExecStart=/bin/true ExecReload=/bin/true RemainAfterExit=on [Install] WantedBy=multi-user.target
我正在用一个configuration相同的服务器上的networkd创build一个VLAN接口: [NetDev] Name=vlan3 Kind=vlan [VLAN] Id=3 然后我创build一个这样的界面: [Match] Name=vlan3 [Network] Address=10.1.0.x/24 其中x是每个服务器的唯一编号。 我的问题是,VLAN是不是真的可用,因为networkd似乎在每台服务器上select相同的MAC地址(在我的情况下72:ae:43:d7:0f:d7 )。 我知道我可以使用MACAddress来设置一个MAC地址,或者通过MACAddressPolicy影响这一代。 但是什么是networkd没有指定呢?
我已经为它build立了一个应用程序和一个systemd单元。 systemd单元工作正常,但是由于dev和prod环境已经分歧,我开始将configuration移出到环境variables,我似乎无法让他们在systemd中工作。 我已经尝试了系统级的环境variables,而且它们对操作系统是可见的,但不是程序,所以我开始考虑将它们构build到systemd单元中。 首先我尝试使用EnvironmentFile 我创build了一个简单的环境文件 LCSQLH=localhost LCSQLU=application 作为/etc/lc.sh和 [Unit] Description=Service for this app [Service] EnvironmentFile=/etc/lc.sh ExecStart=/usr/bin/env python /opt/app/__init__.py 做了一个systemctl –system daemon-reload但不,我的应用程序错误: Jan 27 14:24:59 machine.host env[630]: KeyError: 'LCSQLU' 我看到一些有: EnvironmentFile=-/etc/lc.sh 我试过….不… 所以我试着把它们分别放进去 [Service] Environment="LCSQLH=localhost" Environment="LCSQLU=application" ExecStart=/usr/bin/env python /opt/app/__init__.py 再一次,没有… 所以我听说/etc/systemd/service_name.service.d的想法,所以我把一个service.conf在那里的环境(与上述相同的格式),但没有… 我的应用程序无法访问这些环境variables。 如果我导出它们(手动在我的shell或使用/etc/profile.d/)并直接运行我的应用程序,它的工作,所以这是不是被设置,而不是一个应用程序的问题。 这是Centos 7.3,我select了环境variables而不是硬编码的configuration,因为它可以运行在linux或windows上,所以不想把configuration文件埋在/ etc /
我有一个简单的systemd服务单元来启动我的Node.JS Web服务器,出于某种原因, Restart=on-failure不起作用并重新启动进程。 这是我的服务单元文件(删除了专有名称): [Unit] Description=Node.JS web server After=network.target [Service] User=villa Environment=NODE_PATH=. WorkingDirectory=/path/to/server/code PermissionsStartOnly=true ExecStart=/usr/local/bin/node server.js ExecStop=/bin/killall node Restart=on-failure RestartSec=1 [Install] WantedBy=multi-user.target 接下来,我做一个daemon-reload ,然后restart这个进程,并用像这样的SIGKILL杀死它: [root@localhost ~]# ps -ef | grep node villa 24783 1 17 10:54 ? 00:00:00 /usr/local/bin/node server.js root 25172 26051 0 10:54 pts/1 00:00:00 grep –color=auto node [root@localhost ~]# kill -9 24783 […]
我有一个Ubuntu 16.04机器。 我写了一个非常简单的系统服务。 这样做的目的是创build一个服务,一旦启动过程完成并运行一个python脚本就会启动。 如果python脚本崩溃,它也应该重新启动python脚本。 这是我的systemd脚本的样子。 [Unit] Description=My Python Script Requires=multi-user.target After=multi-user.target [Service] Type = forking WorkingDirectory=/path/to/my/python/script/ ExecStart=/usr/bin/python /path/to/my/python/script/mypythonscript.py Restart=always [Install] WantedBy=multi-user.target 这个脚本是使用这个教程编写的。 我跟着那里的台阶改了名字。 我现在有一个服务,我可以手动统计。 如果我做sudo service myservice start我能够开始我的服务。 但是,该服务在机器启动时不启动。 它需要手动启动。 你知道我怎么能解决这个问题吗? 在Ubuntu 16.04操作系统启动后,启动服务的正确方法是什么? 谢谢!
有一个守护进程可以从命令行和systemctl启动。 /etc/systemd/system/mydaemon.service包含ExecStart =和PIDFile =所以Systemd可以确定检测到服务正在运行或不运行: [Unit] After=network-online.target [Service] Type=simple ExecStart=/usr/local/bin/mydaemon –no-fork PIDFile=/var/run/mydaemon-%i.pid [Install] WantedBy=multi-user.target 为什么“systemctl status mydaemon”说守护进程即使在运行也停止了? 如何教systemd这个守护进程不仅可以通过“systemctl start”运行,而且可以直接运行?
如问题所述,为什么每个systemd服务文件都有完整的程序path,例如: ExecStart=/usr/bin/coolprogram 当它可能是 ExecStart=coolprogram