我需要在后台执行程序,并且该程序应在Shell执行后继续运行。
我正在使用nohup
执行脚本,并使用bash -c
使脚本在后台运行。
#!/bin/bash
cd /mnt/go/src/github.com/something && pwd && bash -c "nohup go run apps/something/main.go >> /var/logs/go/crash.log 2>&1 &"
我需要使用nohup
获取在生成的shell中执行的bash -c
命令的pid,我尝试使用
cd /mnt/go/src/github.com/something && pwd && bash -c "nohup go run
apps/something/main.go >> /var/logs/go/crash.log 2>&1 & echo $! > /var/run/something.pid"
但是输出为空字符串,有没有更好的方法来解决此问题。
由于使用bash -c
,因此无法使用$?
来获取PID。
答案 0 :(得分:2)
您为什么要用abstract static class Animal{
private String name;
String latin;
}
链接所有内容?如果要在发生错误时停止脚本,只需在shebang下方添加import os
import zipfile
# get all files from directory
files_list = os.listdir(".")
# collect valid files
files_to_pack = []
for item in files_list:
try:
file_name, file_extension = item.split('.')
if file_extension == 'ad' or file_extension == 'txt':
files_to_pack.append(item)
except:
pass
# sort and pair files
sorted_files = sorted(files_to_pack)
pairs_files = [sorted_files[i:2+i] for i in range(0,len(sorted_files),2)]
# zip paired files
for item in pairs_files:
with zipfile.ZipFile(item[0].split('.')[0] + '.zip', 'w') as myzip:
myzip.write(item[0])
myzip.write(item[1])
myzip.close()
。如果命令返回的退出状态不等于0,则可确保脚本停止执行。请勿使用&&
(在评论中阅读链接)。
正如我在先前的编辑中错误地评论的那样,您的代码似乎应该首先有效(thx @tripleee)。
我认为发生此错误是因为您使用set -e
而不是set -e
。发生该错误是因为Bash首先必须解析该字符串以替换变量。由于当前shell尚未创建子进程,因此"
为空,因此您的文件也为空。尝试使用单引号:
'