Answers:
在您放入的文件中,/etc/init.d/
您必须使用以下命令将其设置为可执行文件:
chmod +x /etc/init.d/start_my_app
感谢@meetamit,如果此命令无法运行,则必须创建一个符号链接到 /etc/rc.d/
ln -s /etc/init.d/start_my_app /etc/rc.d/
请注意,在最新的Debian上,这将不起作用,因为您的脚本必须符合LSB(至少提供以下操作:启动,停止,重启,强制重载和状态): https://wiki.debian .org / LSBInitScripts
需要注意的是,您应该放置脚本的绝对路径而不是相对路径,这可能会解决意外的问题:
/var/myscripts/start_my_app
并且不要忘记在该文件之上添加:
#!/bin/sh
ln
命令),指向该目录中的目录rc.d
/etc/rc.d
文件夹,但我有/etc/rcX.d
文件夹(即/etc/rc0.d,/etc/rc1.d,/etc/rcS.d),也有一个文件的/etc/rc.local。我认为您应该在自定义文件夹中/etc/rc9.d
或在现有文件夹之一中创建符号链接...(Ubuntu Server 14.04)
为此设置一个crontab
#crontab -e
@reboot /home/user/test.sh
每次启动后,它将运行测试脚本。
@reboot sh $HOME/test.sh
在crontab中更干净
crontab -l
应该显示@MycrofD,@reboot sh $HOME/test.sh
以确认它实际上已设置。
一种简单的方法是在中添加一行/etc/rc.local
:
/PATH/TO/MY_APP &
或者如果您想以特殊用户身份运行命令:
su - USER_FOOBAR -c /PATH/TO/MY_APP &
(结尾的“&”号使进程成为后台,并允许rc.local继续执行)
如果您想要一个完整的初始化脚本,那么debian distro有一个模板文件,因此:
cp /etc/init.d/skeleton /etc/init.d/your_app
并适应它。
stop_my_app
)时,我必须使用sudo
,否?另外,我想知道后面的&符号到底是什么功能。
&
在后台运行该过程
init.d
做事的方式(您的答案当时对我来说只是一个更简单的解决方法) 。这篇文章获得了很多意见和投票,因此保持准确性很重要。
这就是我在Red Hat Linux系统上执行此操作的方式。
将您的脚本放入/etc/init.d
,由根和可执行文件拥有。在脚本顶部,您可以给指令chkconfig
。例如,以下脚本用于以oracle用户身份启动Java应用程序。
该脚本的名称是 /etc/init.d/apex
#!/bin/bash
# chkconfig: 345 99 10
# Description: auto start apex listener
#
case "$1" in
'start')
su - oracle -c "cd /opt/apex ; java -jar apex.war > logs/apex.log 2>logs/apex_error.log &";;
'stop')
echo "put something to shutdown or kill the process here";;
esac
这表示脚本必须在3、4和5级运行,启动/停止的优先级为99和10。
然后,root
您可以chkconfig
以用户身份在启动时启用或禁用脚本:
chkconfig --list apex
chkconfig --add apex
您可以使用service start/stop apex
。
输入cron
使用sudo
:
sudo crontab -e
添加一个在启动时运行的命令,在这种情况下为脚本:
@reboot sh /home/user/test.sh
救:
按ESC,然后按:x保存并退出,或者按ESC再按ZZ(即shift + zz)
测试测试测试:
在不使用cron的情况下运行测试脚本,以确保其确实有效。
确保将命令保存在cron中,使用 sudo crontab -e
重新启动服务器以确认一切正常 sudo @reboot
sudo
如果要使用当前用户在启动过程中运行某个命令,请不要使用。
/tmp
??
只需在crontab中添加一行即可。
确保文件是可执行文件:
chmod +x /path_to_you_file/your_file
要编辑crontab文件:
crontab -e
您必须添加的行:
@reboot /path_to_you_file/your_file
这么简单!
# uname -a Linux accton-xp70a0-26-a1 3.11.10-301.fc20.x86_64 #1 SMP Thu Dec 5 14:01:17 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
你能行的 :
chmod +x PATH_TO_YOUR_SCRIPT/start_my_app
然后使用此命令
update-rc.d start_my_app defaults 100
请参阅Cyberciti上的此页面。
创建自己的/ init可执行文件
这不是您想要的,但很有趣!
只需选择一个任意的可执行文件,甚至是一个shell脚本,然后使用命令行参数启动内核即可:
init=/path/to/myinit
在启动快要结束时,Linux内核在给定路径上运行第一个用户空间可执行文件。
几个项目很受欢迎 init
了主要发行版(例如systemd)使用的可执行文件,在大多数发行版中,init都会派生一堆用于正常系统操作的进程。
但是我们可以劫持 /init
它以运行我们自己的最小脚本,以更好地了解我们的系统。
这是一个最小的可重复设置:https : //github.com/cirosantilli/linux-kernel-module-cheat/tree/f96d4d55c9caa7c0862991025e1291c48c33e3d9/README.md#custom-init
对于Debian 9,请参见/ubuntu/228304/how-do-i-run-a-script-at-start-up。对我有帮助。Debian 9的简短版本:将命令(以root身份)添加到/etc/rc.local
/path_to_file/filename.sh || exit 1 # Added by me
exit 0
可能/path_to_file/filename.sh应该是可执行的(我认为是)。
在卢本图,我不得不处理相反的情况。引导后Skype开始运行,我在~/.config/autostart/
文件中找到了skypeforlinux.desktop
。该文件的内容如下:
[Desktop Entry]
Name=Skype for Linux
Comment=Skype Internet Telephony
Exec=/usr/bin/skypeforlinux
Icon=skypeforlinux
Terminal=false
Type=Application
StartupNotify=false
X-GNOME-Autostart-enabled=true
删除该文件对我有帮助。
$ update-rc.d myScript.sh defaults NN
NN是应该执行的顺序。例如99表示它将在98之后100之前运行。使用Python 3微服务或shell;使用Ubuntu Server 18.04(Bionic Beaver)或Ubuntu 19.10(Eoan Ermine)或Ubuntu 18.10(Cosmic Cuttlefish ),我总是喜欢这些步骤,并且它也总是有效:
在我的案例中,创建一个名为p的微服务示例“ brain_microservice1.service”:
$ nano /lib/systemd/system/brain_microservice1.service
在此新服务内:
[Unit]
Description=brain_microservice_1
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/bin/python3.7 /root/scriptsPython/RUN_SERVICES/microservices /microservice_1.py -k start -DFOREGROUND
ExecStop=/usr/bin/python3.7 /root/scriptsPython/RUN_SERVICES/microservices/microservice_1.py -k graceful-stop
ExecReload=/usr/bin/python3.7 /root/scriptsPython/RUN_SERVICES/microservices/microservice_1.py -k graceful
PrivateTmp=true
LimitNOFILE=infinity
KillMode=mixed
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
授予权限:
$ chmod -X /lib/systemd/system/brain_microservice*
$ chmod -R 775 /lib/systemd/system/brain_microservice*
然后授予执行权限:
$ systemctl daemon-reload
然后启用,这将使它始终在启动时开始
$ systemctl enable brain_microservice1.service
然后您可以对其进行测试;
$ sudo现在重启
完成=成功!!
可以使用相同的主体脚本来运行外壳,进行反应...数据库启动脚本...任何类型的OS代码...希望对您有所帮助...
...
我指的是这个博客,总是听起来不错的选择
https://blog.xyzio.com/2016/06/14/setting-up-a-golang-website-to-autorun-on-ubuntu-using-systemd/
vim /lib/systemd/system/gosite.service
Description=A simple go website
ConditionPathExists=/home/user/bin/gosite
[Service]
Restart=always
RestartSec=3
ExecStart=/home/user/bin/gosite
[Install]
WantedBy=multi-user.target
systemctl enable gosite.service
这是一个更简单的方法!
第一:编写一个shell脚本并将其保存为.sh,这是一个示例
#!/bin/bash
Icoff='/home/akbar/keyboardONOFF/icon/Dt6hQ.png'
id=13
fconfig=".keyboard"
echo "disabled" > $fconfig
xinput float $id
notify-send -i $Icoff "Internal Keyboard disabled";
此脚本将在启动时禁用内部键盘。
第二:打开应用程序“启动应用程序首选项”
第三:单击添加。第四:在“名称”部分输入名称。第五:在命令部分中浏览到.sh。第六:将命令部分编辑为:
bash <space> path/to/file/<filename>.sh <space> --start
第七:单击添加。而已!完蛋了!
现在,通过重新启动PC进行确认。
干杯!
无痛,最简单,最通用的方法就是简单地使用~.bash_profile
or ~.profile
(如果没有bash_profile文件)执行它。
只需在该文件的底部添加执行命令,它将在系统启动时执行。
我在底部有一个示例。
~\Desktop\sound_fixer.sh
~/.bash_profile
在用户登录时执行- 不在系统启动时执行。在最初的问题中,目的是在计算机启动时运行Node.js应用服务器。您的解决方案将要求人类用户在Node.js服务器运行之前首先登录计算机。而且,如果某种问题导致服务器在一夜之间重新启动,则该应用程序将永远无法恢复运行,直到人类重新登录为止
对于某些人来说,这将起作用:
您可以简单地将以下命令添加到系统 → 首选项 → 启动应用程序中:
bash /full/path/to/your/script.sh
init.d
解决方案(here)应该比rc.local
解决方案更可取,因为后者是旧工具,但仍可以使用,因为新工具向后兼容。