❶ linux如何设置程序开机启动后台运行
有些时候,我们需要在终端启动一个程序,并使之运行——但是如果关闭终端,那么这个程序也就随着关闭了。那么有没有什么方法在关闭终端后,让已经从这个终端启动的程序继续运行呢?有以下方法
1.让linux忽略终端的hung up 信号,不关闭进程;
2.让此进程变为终端的非子进程。
方法一:
在终端输入命令:
# ./pso > pso.file 2>&1 &
解释:将pso直接放在后台运行,并把终端输出存放在当前目录下的pso.file文件中。
当客户端关机后重新登陆服务器后,直接查看pso.file文件就可看执行结果(命
令:#cat pso.file )。
或者 在终端输入命令:
# nohup ./pso > pso.file 2>&1 &
解释:nohup就是不挂起的意思,将pso直接放在后台运行,并把终端输出存放在当前
目录下的pso.file文件中。当客户端关机后重新登陆服务器后,直接查看pso.file
文件就可看执行结果(命令:#cat pso.file )。
方法二:
实现方案就是nohup命令。
例如要启动jboss,可以nohup ./run.sh &。这样就可以了,结尾的“&”符号表示后台启动jboss,从而不影响继续运行其他命令。
但这样有一个问题,nohup命令虽然可以让linux“放过”这个进程,但是nohup会同时把进程的控制台输出重定向到nohup.txt下(默认是这个文件),当然可以重定向为其他的文件,但是输出总会有的。
如果jboss运行很长时间,而且如果有很多控制台输出的话,nohup.txt文件就会变的很大很大。
通常项目中的日志都会输出到特定的日志文件或者输出到 数据库 中,也就是说控制台的输出对于程序的意义不大,那么可不可以抛弃掉这些输出呢?答案是肯定的。
这里讲解一下linux的重定向(注意,是linux的重定向,不是针对nohup)。
0、1和2分别表示标准输入、标准输出和标准错误信息输出,可以用来指定需要重定向的标准输入或输出。
在一般使用时,默认的是标准输出,既1.当我们需要特殊用途时,可以使用其他标号。例如,将某个程序的错误信息输出到log文件中:./program 2>log。这样标准输出还是在屏幕上,但是错误信息会输出到log文件中。
另外,也可以实现0,1,2之间的重定向。2>&1:将错误信息重定向到标准输出。
Linux下还有一个特殊的文件/dev/null,它就像一个无底洞,所有重定向到它的信息都会消失得无影无踪。
结合nohup,我们可以这样 nohup ./run.sh >/dev/null &
这是最简单的一种方式,既保证了程序能够一直后台执行,又能保证不会产生太大的nohup.txt文件。
方法三:
利用的linux的一个机制,让程序在subshell中执行,方法很简单,将命令用括号() 括起来即可。
ps -ef | grep test
可以看到run.sh的父进程为1,不是当前终端了,这样就能忽略hung up信号。
当然linux还可以动态的让程序后台运行或不被hung up 信号关闭,例如disown命令,setid命令等。
方法四:
如果是使用Ubuntu的话,你可以利用CTRL+ALT+T组合键打开终端。当然你也可以使用超级键(Windows键)打开Dash,搜索“TERM”,然后点击“Term”图标来打开终端窗口。 对于其他的桌面环境来说,例如XFCE、KDE、LXDE、Cinnamon以及MATE,你可以在菜单中找到终端。有些环境会在停靠栏或者面板上面包含终端图标。 通常情况下,你可以在终端里面直接输入应用程序名来启动一个应用程序。比如说,你可以通过输入“firefox”来启动Firefox。 在终端启动应用程序的好处是,你可以包含一些额外的参数。 例如,你可以通过下列命令来打开一个Firefox浏览窗口,然后利用默认的搜索引擎搜索相关信息: firefox -search “linux.cn”
你可能会注意到,如果你启动Firefox,程序打开以后,回到了终端窗口控制,这就意味着你可以继续在终端进行工作。 通常情况下,如果你在终端启动了应用程序,控制会切换到新启动的应用程序,只有程序被关闭以后才会重新切换到终端控制。这是因为你在前台启动了这个程序。 如果要在Linux终端打开应用程序并且返回终端控制,那么你需要将应用程序启动为后台进程。 和下面所列的命令一样,我们可以通过增加一个(&)符号,将应用程序在后台启动。 libreoffice &
译者注:如果需要加参数的话,记得把&符号放在最后。 译者注:一般情况下,关闭终端时,在这个终端启动的后台程序也会被终止,要使终端关闭以后,后台程序依然保持执行可以使用下列命令 nohup command [arg…] & 如果应用程序目录没有安装在PATH变量包含的目录里面的话,我们就没有办法直接通过应用程序名来启动程序,必须输入应用程序的整个路径来启动它。 /path/to/yourprogram &
如果你不确定程序输入哪个Linux目录结构的话,可以使用find或者location命令来定位它。 可以输入下列符号来找到一个文件: find /path/to/start/from -name programname
例如,你可以输入下列命令来找到Firefox: find / -name firefox
命令运行的结果会嗖的一下输出一大堆,别担心,你也可以通过less或者more来进行分页查看。 find / -name firefox | more find / -name firefox | less
当find命令查找到没有权限访问的文件夹时,会报出一条拒绝访问错误, 你可以通过sudo命令来提示权限。当然,如果你没有安装sudo的话,就只能切换到一个拥有权限的用户了。 sudo find / -name firefox | more
如果你知道你要查找的文件在你的当前目录结构中,那么你可以使用点来代替斜杠: sudo find . -name firefox | more
你可能需要sudo来提升权限,也可能根本就不需要,如果这个文件在你的主目录里面,那么就不需要使用sudo。 有些应用程序则必须要提升权限才能运行,否则你就会得到一大堆拒绝访问错误,除非你使用一个具有权限的用户或者使用sudo提升权限。 这里有个小窍门。如果你运行了一个程序,但是它需要提升权限来操作,输入下面命令试试: sudo !!
方法五: 在Unix/Linux下如果想让程序独立终端运行,一般都是使用 & 在命令结尾来让程序自动运行。(命令后可以不追加空格) 打开gnome-terminal,执行如下命令: [email protected]:~$ totem &[1] [email protected]:~$ 有几点需要注意: 已经启动的程序依然attach于当前pts,只有当前终端模拟器关闭(使用exit命令退出),进程自动被tty继承。[email protected]:~$ ps -e | grep totem //程序已被以totem & 形式启动,当前附在pts0上8819 pts/0 00:00:00 [email protected]:~$ ps -e | grep totem //pts0的模拟终端被exit命令关闭,totem自动附在tty8819 ? 00:00:00 [email protected]:~$ 具有debug输出的进程,需要按enter键进行中断当前debug输出。但是如果程序持续进行printf,你将无法输入任何命令。[email protected]:~$ vlc &[1] [email protected]:~$ VLC media player 1.0.6 Goldeneye[0x8b998b0] main libvlc: Running vlc with the default interface. Use ‘cvlc’ to use vlc without interface. //enter [email protected]:~$ //show a clean terminal now** (:8850): CRITICAL **: giop_thread_request_push: assertion `tdata != NULL’ failed //仍然在输出数据…… //关闭程序[1]+ Done [email protected]:~$ 你无法记录程序的debug输出结果。 只有当虚拟终端是 $ 或者 # 时候,才可以关闭此终端,否则可能导致已经启动的进程被关闭(按enter——如果程序持续输出信息而没有出现 $ 或 #) 使用nohup命令: nohup描述:Run COMMAND, ignoring hangup signals.(忽略任何中断/挂起信号,使命令继续执行) 但是当你尝试使用命令: 1nohup command 时候却会遇到不大不小的麻烦…… [email protected]:~$ nohup vlcnohup: ignoring input and appending output to `nohup.out’ 是的,虽然它自动把debug信息记录到nohup.out文件,但是你却无法使用这个终端进行任何操作。 所以你需要和第一个方法混用,即 nohupcommand {option}& 混用后,它会自动把你执行的命令输出结果记录到权限为-rw——-,名为nohup.out的文件中。 但是你仍然需要 [email protected]:~$ nohup vlc &[1] [email protected]:~$ nohup: ignoring input and appending output to `nohup.out’ //在这里按一下回车或以ctrl+c以 //show a clean terminal [email protected]:~$ 与使用 “&” 性质相同,当前启动程序的终端如果没有被关闭,已经启动的程序附在pst上;如果终端被关闭,则自动附在tty。 如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out。默认状态下,nohup默认输出到nohup.out文件,你也可以利用重定向来指定输出文件: nohupcommand {option} > myout.file 2>&1 & 只有当虚拟终端是 $ 或者 # 时候,才可以关闭此终端,否则可能导致已经启动的进程被关闭(按enter——如果程序持续输出信息而没有出现 $ 或 #) 其他相关命令: jobs:查看当前有多少在后台运行的命令 fg:将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid) bg:将一个在后台暂停的命令,变成继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid) 杀死进程 杀死已经启动的程序和普通方式一样: pkill -9 name killall name kill pid … 命令应用: linux服务器挂机下载;启动相关服务;linux服务器启动进程(尤其是ssh登录) 我就曾经用 1nohup aria2c -i downloadlist -m 0 -j 1 &
❷ 如何在 Linux 启动时自动执行命令或脚本
Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。有用户想要在Linux启动时候自动执行命令脚本,应该怎么设置呢?这篇文章主要介绍了详解如何在 Linux 启动时自动执行命令或脚本,主要有两种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
方法步骤
在启动时执行 Linux 脚本
有两种传统的方法可以实现在启动时执行命令或脚本:
方法 #1 – 使用 cron 任务
除了常用格式(分 / 时 / 日 / 月 / 周)外,cron 调度器还支持 @reboot 指令。这个指令后面的参数是脚本(启动时要执行的那个脚本)的绝对路径。
然而,这种方法需要注意两点:
a) cron 守护进程必须处于运行状态(通常情况下都会运行),同时
b) 脚本或 crontab 文件必须包含需要的环境变量(如果有的话,参考 StackOverflow 获取更多详细内容)。
方法 #2 – 使用 /etc/rc.d/rc.local
这个方法对于 systemd-based 发行版 Linux 同样有效。不过,使用这个方法,需要授予 /etc/rc.d/rc.local 文件执行权限:
# chmod +x /etc/rc.d/rc.local
然后在这个文件底部添加脚本。
下图说明如何分别使用 cron 任务和 rc.local 运行两个示例脚本(/home/gacanepa/script1.sh 和 /home/gacanepa/script2.sh)。
script1.sh:
#!/bin/bash
DATE=$(date +'%F %H:%M:%S')
DIR=/home/gacanepa
echo "Current date and time: $DATE" > $DIR/file1.txt
script2.sh:
#!/bin/bash
SITE="Tecmint.com"
DIR=/home/gacanepa
echo "$SITE rocks… add us to your bookmarks." > $DIR/file2.txt
*启动时执行 Linux 脚本 *
记住,一定要提前给两个示例脚本授予执行权限:
$ chmod +x /home/gacanepa/script1.sh
$ chmod +x /home/gacanepa/script2.sh
在登录或注销时执行 Linux 脚本
要在登录或注销时执行脚本,分别需要使用 ~.bash_profile 和 ~.bash_logout 文件。多数情况下,后者需要手动创建。在每个文件的底部,添加调用脚本代码,如前面例中所示,就可以实现这个功能。
补充:Linux基本命令
1.ls命令:
格式::ls [选项] [目录或文件]
功能:对于目录,列出该目录下的所有子目录与文件;对于文件,列出文件名以及其他信息。
常用选项:
-a :列出目录下的所有文件,包括以 . 开头的隐含文件。
-d :将目录像文件一样显示,而不是显示其他文件。
-i :输出文件的i节点的索引信息。
-k :以k字节的形式表示文件的大小。
-l :列出文件的详细信息。
-n :用数字的UID,GID代替名称。
-F : 在每个文件名后面附上一个字符以说明该文件的类型,“*”表示可执行的普通文 件;“/”表示目录;“@”表示符号链接;“l”表示FIFOS;“=”表示套接字。
2.cd命令
格式:cd [目录名称]
常用选项:
cd .. 返回上一级目录。
cd ../.. 将当前目录向上移动两级。
cd – 返回最近访问目录。
3.pwd命令
格式: pwd
功能:显示出当前工作目录的绝对路径。
相关阅读:Linux主要特性
完全兼容POSIX1.0标准
这使得可以在Linux下通过相应的模拟器运行常见的DOS、Windows的程序。这为用户从Windows转到Linux奠定了基础。许多用户在考虑使用Linux时,就想到以前在Windows下常见的程序是否能正常运行,这一点就消除了他们的疑虑。
多用户、多任务
Linux支持多用户,各个用户对于自己的文件设备有自己特殊的权利,保证了各用户之间互不影响。多任务则是现在电脑最主要的一个特点,Linux可以使多个程序同时并独立地运行。
良好的界面
Linux同时具有字符界面和图形界面。在字符界面用户可以通过键盘输入相应的指令来进行操作。它同时也提供了类似Windows图形界面的X-Window系统,用户可以使用鼠标对其进行操作。在X-Window环境中就和在Windows中相似,可以说是一个Linux版的Windows。
支持多种平台
❸ 怎么在linux启动的时候执行一个命令
有两种方式:一种方式是根据运行级别配置服务,一种方式是执行本地特回殊配置。举例,答任务是启动时运行命令cvslockd:方式一:1、 建立自启动脚本/etc/rc.d/init.d/cvslockd,内容为:#!/bin/bash/usr/local/bin/cvslockd设置文件的属性为可执行:#chmod +x /etc/rc.d/init.d/cvslockd2、查看计算机运行级别,在文件/etc/inittab里看到id:5:initdefault:,则此系统运行级别为5;3. 到/etc/rc5.d目录下,把你要执行的可执行文件做一个软连接,而且在命名的时候要以大写S字母开头,S之后的数字大小代表执行顺序的先后,数字越大越后执行。#ln -s /etc/rc.d/init.d/cvslockd /etc/rc5.d/S100cvslockd#ln -s /etc/rc.d/init.d/cvslockd /etc/rc0.d/K20cvslockd方式二:在/etc/rc.d/rc.local 添加 exec /usr/local/bin/cvslockd该方式是在最后启动cvslockd。
❹ Linux下如何让自己的程序在开机时自动启动
Linux在开复启启动时,会自动运行制/etc下面的各个配置文件或者脚本文件。你可以在/etc下面的某个文件里运行你的程序。比如:/etc/profile文件里直接运行你的程序:./your_dir/your_app
❺ ARM Linux开机后自动运行特定程序的方法
开机后自动运行用户的应用程序或启动系统服务的命令保存在开发板根文件系统的/usr/etc/rc.local文件中。有的开发板开机后自动运行图形界面程序,需要按住ctrl+c让开发板进入到linux的SHELL提示符界面。其实可通过注释掉rc.local文件中调用图形界面的命令,增加运行用户应用程序的命令,达到开机自动运行用户应用程序的目的。下面以我做的实验为例,描述具体的实现步骤。该方法源于网络,我加以验证,稍做修改,此文相当于转载。1.进入pc机的linux操作系统,在/nfs/usr/下通过mkdirlz命令新建一个名为lz的文件夹,进入lz文件夹,通过mkdirhello新建一个hello文件夹用来存放我们将要编写的hello.c文件和编译生成的可执行文件。2.在/nfs/usr/lz/hello下通过vihello.c命令新建hello.c文件,编辑如下测试程序:#includeintmain(){printf("Hello,testarm-linux!");return0;}完成编辑后通过:wq保存后退出。3.主机通过如下命令交叉编译环境编译hello.c:#arm-linux-gccohellohello.c4.通过ls命令可以看到在/nfs/usr/lz/hello/下已经生成了hello可执行文件,我们可以在开发板上通过./hello来测试自己编写的hello.c执行情况5.修改rc.local文件,在文件的最后通过‘#’释掉启动图形界面的指令,增加执行用户应用程序hello的指令,具体实现如下:#exportPATH=$QPEDIR/bin:$PATH#qtopia#/usr/qtopia/bin/qtopia/usr/lz/hello/./hello注:前三行是注释掉启动图形界面,最后一行是添加的执行用户的hello测试程序。6.重启开发板,通过vivi参数配置让开发板通过nfs挂载主机上的文件系统,这时我们就可以通过超级终端看到开发板已经运行了我们编写的hello程序。
❻ 如何在linux下开机自启动一个可执行文件
这个文件是必须有的只是你没找到你看不见空气不能说明它不存在同理,没有启动配置脚本系统凭什么按照计划正常启动?实在看不见sudo ls -al /etc/rc.d
❼ linux运行某个文件的命令
在/bin;/usr/bin;/usr/local/bin;目录下面是二进制文件可以在终端输入例如 mplayer xxx.mp3 等等打开图片文件 用 gimp 也可用其他 图像处理软件
❽ Linux Debian系统下,我想开机后,开机自动运行我开发的一个test.jar文件,怎么做到开机自启
题主你好,在/etc/profile.d/目录下新建一个脚本文件, 把题主那个启动jar包的命令放里面, 然后给这个脚本文件加上可执行权限,重新启动后, 题主的命令应该就会被自动执行了.说明: 题主看看能不能看明白,如果行就自己整一下,我这想给你往详细了写, 但现在基本上我一截图就会被判违规, 等申诉完了,都不知啥时候了, 如果题主不明白就追问,我在追问里和你细说.希望可以帮到题主, 欢迎追问.
❾ 分析linux下如何运行一个执行文件
命令行下面:1.chmod 空格"+x" 空格 你的sh文件名 (+x是一个整体,不要拆开)2.输入"./你的sh文件名" 即可执行举例:1 chmod +x helloworld.sh2 ./helloworld.sh
❿ Linux英文版系统如何设置开机启动特定的一个文件,求详细教程
设置开机启动rc.local文件加入你要启动文件全路径针对红帽系统,其他系统会有不同
未经允许不得转载:山九号 » linux开机运行一个文件|ARM Linux开机后自动运行特定程序的方法