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