在 RHEL7 启动时执行脚本

在 RHEL7 启动时执行脚本

我的一台服务器每周日和周一早上都会重启,每当服务器启动时,我都需要重启服务。实际上,我会调用一个脚本来执行自身(每次都是手动执行)。我想要实现的是,每次服务器启动时都应该可以调用这个脚本来执行。这可能吗?

我每次执行的脚本是这样的:

cd /var/www/activefolder/current && RAILS_ENV=production script/delayed_job start

如您所见,该脚本结合了两个任务来完成此任务。

服务器操作系统是 Redhat EL 7。我猜直到 6,操作系统都使用 init.d,而 RHEL7 引入了一个更灵活的选项,称为 systemd。但不确定是否可以像我提到的那样进行设置。任何帮助都将不胜感激。

不确定我是否已经为您提供了回答此问题所需的所有信息。如果没有,请随时提问,我会用相关信息更新我的问题。

答案1

根据 Redhat 的文档创建自定义单元文件systemd.exec — 执行环境配置

未经测试™

创建文件(似乎推荐使用touch>chmod>edit,但我不知道为什么):

touch /etc/systemd/system/activefolder.service
chmod 664 /etc/systemd/system/activefolder.service
vim /etc/systemd/system/activefolder.service

/etc/systemd/system/activefolder.service例子:

[Unit]
Description=activefolder
After=network.target

[Service]
WorkingDirectory=/var/www/activefolder/current
ExecStart=/var/www/activefolder/current/script/delayed_job start
Type=forking
PIDFile=/run/activefolder.pid
Environment="RAILS_ENV=production"
#User=httpd
#Group=httpd

[Install]
WantedBy=default.target

然后:

systemctl daemon-reload
systemctl start name.service

答案2

您不需要创建 systemd 服务来在启动时运行命令,可以使用 来完成crontab

只需将需要运行的命令与@reboot <user_name>前缀添加到您的/etc/crontab

对于你来说,情况是这样的:

@reboot root cd /var/www/activefolder/current && RAILS_ENV=production script/delayed_job start

已在 CentOS 6/7 上测试通过(需要vixie-cron,可能不适用于cronie

答案3

在末尾添加命令/etc/rc.local似乎仍然有效。

(但请确保它是可执行的。)

答案4

一般来说,每个 Linux 发行版都具有很大的灵活性,可以执行初始化脚本、配置文件(通过包含)等中的脚本、代码或其他程序……只要脚本、配置文件或您使用的任何内容处于允许这样做的安全环境中。

根据代码需要完成的任务,您可能需要在某个服务启动后或在其他服务启动前运行该代码。在某些情况下,仅将其放在 /etc/rc.local 中是不够的。如果您由于代码本身的特性而需要对代码的执行方式进行更多控制,则需要了解初始化脚本是如何触发的、运行级别是什么等等...以下是不错的起点:

对于基于 init 的系统 (RHEL < 7): https://www.linux.com/news/introduction-services-runlevels-and-rcd-scripts

对于 systemd 系统(RHEL >= 7): http://0pointer.de/blog/projects/systemd-for-admins-1.html

相关内容